我试图在文本符号行处执行一个打开文件的命令。我试着使用show_overlay命令来实现这一点,但是如果您尝试在搜索中使用‘#’,它将无法正确打开。
举例说明。创建一个包含文件的项目,
app/code/community/MagicToolbox/MagicZoomPlus/Model/Observer.php
class MagicToolbox_MagicZoomPlus_Model_Observer {
public function fixLayoutUpdates($observer) {
}
}如果您尝试使用这样的命令创建一个插件:
class MyPluginCommand(sublime_plugin.TextCommand):
def run(self, view):
sublime_api.window_run_command(
self.view.window().id(),
'show_overlay',
{
'overlay': 'goto',
'show_files': True,
'text': 'MagicToolbox/MagicZoomPlus/Model/Observer#fixLayoutUpdates'
}
)它不会直接显示文件。但是,如果从搜索输入中删除所有文本,然后再粘贴它( MagicToolbox/MagicZoomPlus/Model/Observer#fixLayoutUpdates ),它将显示该文件并突出显示该函数。
也许还有另一种方法来实现同样的目标。
发布于 2019-07-11 17:41:06
经过一些调查后,似乎当您向show_overlay提供文本时,它只是直接应用于文本字段的内容,并用作初始显示的简单筛选器,而不需要手动输入文本时发生的任何额外处理。因此,当您插入包含特殊goto功能的文本时,例如您在这里使用的#,它被严格地应用于正在显示的文件上,但不会发生额外的操作。
正如您已经注意到的,打开覆盖,然后作为两个操作输入文本具有所需的效果。因此,为了通过插件来完成这个任务,您需要执行两个操作:
import sublime
import sublime_plugin
class ExampleCommand(sublime_plugin.TextCommand):
def run(self, edit):
self.view.window().run_command("show_overlay", {
"overlay": "goto",
"show_files": True
})
self.view.window().run_command("insert", {
"characters": "Observer#fixLayoutUpdates"
})在这里,我们首先打开覆盖,然后使用insert命令插入文本。这里的重要关键是要求window运行insert命令。尽管insert是一个TextCommand,但要求window执行它会告诉窗口将命令转发给任何碰巧在该窗口中有输入焦点的view,该窗口是覆盖层中的输入区域。
如果正在执行此操作的命令不是自行修改文件的选择或内容,则可以将其改为WindowCommand并使用self.window而不是self.view.window()来缩短。
https://stackoverflow.com/questions/56987311
复制相似问题