После некоторого исследования, похоже, что когда вы предоставляете текст для 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
на выполнение указывает окну переслать команду тому, что view
имеет фокус ввода в этом окне, которое является областью ввода в оверлее.
Если команда, в которой вы делаете это, не изменяет выделение или содержимое файла самостоятельно, вы можете сократить это, сделав вместо этого WindowCommand
и используя self.window
вместо self.view.window()
.