Фрагмент не может быть вставлен тихо в ST3 - PullRequest
4 голосов
/ 14 апреля 2019

Я следил за этим , этим , этим , этим и этим , чтобы создать свой собственный Шаблон в ST3. Поэтому, когда я создаю новый файл, я предварительно загружаю файл с содержимым шаблона. Я прочитал, что я должен сделать это с помощью фрагмента.

Я создаю файл и пытаюсь применить snippet в новом view, но ничего не происходит, я не получаю никакой обратной связи (даже когда я специально ввел неправильное имя фрагмента). Мой фрагмент находится внутри моей папки плагинов:

C:\Users\...\AppData\Roaming\Sublime Text 3\Packages\MyPlugin\templ.sublime-snippet

Мои многочисленные попытки приведены ниже:

def on_done(...):
        ...
        open(path, 'a').close()
        new_view = self.window.open_file(path)

        # These seem to work, so the view seems valid
        print(new_view.file_name())
        print(new_view.line_height())

        # Attempt 1
        template = """<snippet>
        <content><![CDATA[
        Hello, \${1:this} is a \${2:snippet}.
        ]]></content>
        </snippet>
        """
        new_view.run_command("insert_snippet", {"contents": template})

        # Attempt 2: from the user folder. Nothing happens
        new_view.run_command("insert_snippet", { "name": "Packages/User/templ.sublime-snippet" })

        # Attempt 3: from current (?) folder just in case
        new_view.run_command("insert_snippet", {"name" : "templ.sublime-snippet"})

        # Attempt 4, from the actual plugin folder
        new_view.run_command("insert_snippet", {"name" : "Packages/MyPlugin/templ.sublime-snippet"})

        # Attempt 5, absolute directory
        new_view.run_command("insert_snippet", {"name" : "C:\\Users\\nerea\\AppData\\Roaming\\Sublime Text 3\\Packages\\MyPlugin\\templ.sublime-snippet"})

        # Attempt 6, to check if I mistook the path if I would get any error    
        new_view.run_command("insert_snippet", {"name" : "Packages/User/nonexisting.sublime-snippet"})

         # Attempt 7, nothing either
        new_view.run_command("insert_snippet", {"contents" : "<snippet><content><![CDATA[Hello, ${1:this} is a ${2:snippet}.]]></content></snippet>"})

        # This does nothing either. I supposed that should do something
        new_view.run_command("insert", "wawawiwa")

1 Ответ

3 голосов
/ 15 апреля 2019

Проблема в том, что представление не завершило загрузку файла, указанного вами при выполнении команды insert_snippet.Я рекомендую попробовать это:

    new_view = self.window.open_file(path)
    def do_insert():
        if not new_view.is_loading():
            new_view.run_command("insert_snippet", { "name": "Packages/MyPlugin/templ.sublime-snippet" })
        sublime.set_timeout_async(do_insert, 10)
    do_insert()

, если вы вызываете insert_snippet с аргументом contents, API ожидает только содержимое фрагмента - то есть Hello, ${1:this} is a ${2:snippet}. вместо окружающего XML.

Обратите внимание, что обратная косая черта перед долларом в содержимом фрагмента заставит ST рассматривать доллар буквально, вместо того, чтобы разграничивать точки табуляции / редактирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...