python - 片段无法在 ST3 中静默插入
问题描述
我一直在关注这个、这个、这个、这个和这个在 ST3 中创建我自己的模板。因此,当我创建一个新文件时,我会使用模板内容预加载该文件。我已经读过我应该用一个片段来做到这一点。
我创建了一个文件并尝试snippet
在 new中应用 a 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")
解决方案
问题是视图尚未完成加载您在执行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 按字面意思对待美元,而不是描述制表符/编辑点。
推荐阅读
- firebase - 生成 Firebase 云消息传递服务器令牌
- python - 循环遍历只有一个功能的列
- php - 创建一个链接以将查询信息发送到我的数据库中的某个位置
- node.js - 撇号 cms 中图像的默认值?
- docker - 带有存储库 ibm-messaging/mq-container 的 IBM-MQ Docker
- javascript - 将 JSArray 从 HTML 传递到 Javascript
- ruby - Ruby shell:如何停止执行 REPL 复制粘贴?
- node.js - Mongo/express 无法加载路线(邮递员中出现意外的“<”)
- c++ - 在 C++ 中的对象实例化时声明一个数组
- javascript - jqgrid中的确认框