Sublime Text 插件打开文件符号
Sublime Text Plugin Open file symbol
我试图执行命令以在文本符号行打开文件。
我尝试使用 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
它将显示该文件并突出显示该功能。
也许还有另一种方法可以达到同样的目的。
经过一些调查,当您向 show_overlay
提供文本时,它似乎只是直接应用于文本字段的内容,并用作初始显示的简单过滤器,无需任何额外处理如果您手动输入文本,就会发生这种情况。因此,当您插入包含特殊转到功能(例如您在此处使用的 #
)的文本时,它会严格用作正在显示的文件的过滤器,但不会发生额外的操作。
如您所述,打开叠加层然后输入文本作为两个操作具有预期的效果。因此,为了通过插件执行此操作,您需要通过两个操作来执行此操作:
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
执行它会告诉 window 将命令转发给任何 view
恰好有输入焦点的地方window,也就是叠加层中的输入区域
如果您执行此操作的命令没有自行修改文件的选择或内容,您可以通过将其设为 WindowCommand
并使用 [=21] 来缩短它=] 而不是 self.view.window()
.
我试图执行命令以在文本符号行打开文件。 我尝试使用 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
它将显示该文件并突出显示该功能。
也许还有另一种方法可以达到同样的目的。
经过一些调查,当您向 show_overlay
提供文本时,它似乎只是直接应用于文本字段的内容,并用作初始显示的简单过滤器,无需任何额外处理如果您手动输入文本,就会发生这种情况。因此,当您插入包含特殊转到功能(例如您在此处使用的 #
)的文本时,它会严格用作正在显示的文件的过滤器,但不会发生额外的操作。
如您所述,打开叠加层然后输入文本作为两个操作具有预期的效果。因此,为了通过插件执行此操作,您需要通过两个操作来执行此操作:
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
执行它会告诉 window 将命令转发给任何 view
恰好有输入焦点的地方window,也就是叠加层中的输入区域
如果您执行此操作的命令没有自行修改文件的选择或内容,您可以通过将其设为 WindowCommand
并使用 [=21] 来缩短它=] 而不是 self.view.window()
.