我试图执行命令以在文本符号的行处打开文件。 我尝试使用 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
,它将显示文件并突出显示该功能。
也许还有另一种方法可以实现相同的目的。
答案 0 :(得分:1)
经过一番调查,当您向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()
。