sublimetext3 - 如何让我的插件将一行复制到剪贴板?
问题描述
这个 Sublime Text 插件随机选择文本文件中的一个位置并将光标放在那里,就好像用户使用鼠标单击了该位置一样。
我还希望它将该随机位置的行复制到剪贴板中。是否可以在同一个程序中做到这一点?
import sublime, sublime_plugin
import random
class JumpToRandomPositionCommand(sublime_plugin.TextCommand):
"""
When invoked, randomly select a character in the current
file and jump the cursor to that position. Does nothing
if the current file is empty or if the current view does
not represent a file.
"""
def run(self, edit):
view = self.view
if view.size() > 0 and view.settings().get("is_widget", False) == False:
view.sel().clear()
pos = random.randrange(0, view.size())
view.sel().add(sublime.Region(pos, pos))
view.show(pos)
解决方案
有几种方法可以在这里做你想做的事情。因此,这里有一些代码片段,您可以添加到您在问题中提供的插件中。在每种情况下,这些代码位将作为最后一行进入您最终if
语句中的插件(即在调用view.show()
.第一个片段)它必须在光标移动到新位置后发生。
第一,最简单的。Sublime 在默认首选项中包含以下设置:
// If true, the copy and cut commands will operate on the current line
// when the selection is empty, rather than doing nothing.
"copy_with_empty_selection": true,
当它打开时(默认情况下如此处所示),如果您在没有选择的情况下尝试触发copy
or命令,则每个命令都会假定您打算在整行上工作。cut
如果您以这种方式工作,那么添加到插件中的以下行就足以完成这项工作:
view.run_command('copy')
也就是说,要求视图运行copy
命令,如果您手动按下键绑定会发生这种情况。该插件将单个光标设置到带有空选择的随机位置的行中,因此这将对该空选择进行操作并复制该行。
另一方面,如果您不使用此设置,或者您希望命令无论设置为什么都可以工作,那么您需要做更多的工作。看起来像这样:
line = view.full_line(pos)
text = view.substr(line)
sublime.set_clipboard(text)
在这里,我们要求 Sublime 告诉我们文本的跨度代表随机位置所在的行。然后我们从缓冲区中提取该文本并将其添加到剪贴板。
推荐阅读
- c# - 如何像我们在 php 中一样在 C# 中将变量放入图像源中
- python - 如何从正则表达式中排除某些可能性?
- filenet-p8 - 在 FileNet 中搜索特定文件夹的文件夹层次结构
- python - 如何使框架的容量为无穷大或所需的容量?
- django - django,使用复选框传递多条记录
- c++ - 自定义文件格式和在我的 Qt 桌面应用程序中存储文件相关的元数据
- reactjs - 有条件地输入 React 所需的输入
- javascript - 如何对数组中的不同对象数组进行排序
- html - Flex 列在不过度扩展我的内容的情况下不会拉伸
- android - 如何很好地使用 MaterialAlertDialogBuilder?