执行此类操作的正确方法是使用snippets 或completions。尽管存在一些差异,但总的来说,它们最终的工作方式相同,您选择哪一种取决于您要创建多少这样的项目以及您希望它们有多复杂。
使用 sn-p,您可以从菜单中选择 Tools > Developer > New Snippet... 并填写 sn-p 模板,然后将其作为 sublime-snippet 文件保存在 Sublime 默认的位置(即您的 User包裹)。
例如,根据您问题中的示例,这可能如下所示:
<snippet>
<content><![CDATA[
<div class="col-$0">
]]></content>
<description>Insert DIV with column class</description>
<tabTrigger>col</tabTrigger>
<scope>text.html</scope>
</snippet>
片段是 XML 格式的,![CDATA[ 和 ]] 之间的所有内容都插入到缓冲区中(即使您认为不需要它,也不要删除 CDATA;Sublime 将忽略 sn-p如果你这样做)。
tabTrigger 指定您希望触发 sn-p 的文本,scope 表示 sn-p 应触发的文件类型,description 将显示在旁边自动完成面板中的 sn-p。
在 sn-p 中,tabTrigger、scope 和 description 都是可选的。如果您没有指定tabTrigger,您只能从命令面板或通过insert_snippet 命令扩展sn-p(例如在键绑定中)。没有scope,sn-p 适用于所有地方,没有description,它在面板中没有描述。
如果你有很多这样的项目要添加 sn-ps,你也可以使用完成来代替。它们存储在 JSON 文件中,扩展名为 sublime-completions,应保存在您的 User 包中(如果您不知道它在哪里,请使用 Preferences > Browse Packages...。
这样的文件的一个例子是:
{
"scope": "text.html",
"completions": [
{ "trigger": "col\tInsert DIV with column class", "contents": "<div class=\"col-$0\">" },
]
}
在这种格式中,trigger 始终是要触发的文本,并且描述(仍然是可选的)通过trigger 键中的\t 字符与触发器分隔。
在完成中,您只需在顶部指定一次范围,而不是每次,但完成和 sn-ps 之间存在一些功能差异。
每个sublime-snippet 文件只能有一个sn-p,但一个sublime-completions 文件可以在一个文件中包含多个补全; completions 键是一个数组,因此您可以在同一个文件中放置多个完成。
补全是 JSON,因此多行或包含 JSON 特定字符(例如 " 字符)的内容更难输入;完成更适合较短的序列,而 sn-ps 更适合更复杂的事情。
当自动完成触发时,如果有一个 completion 和一个 snippet 可以自动完成,snipptets 总是“获胜”并被插入,而完成循环。这意味着例如在这个特定示例中,您需要按两次 Tab 因为col 也是标签的名称。
代码段会自动出现在命令面板中(当它们应用时),但补全不会。在命令面板中,片段显示为类似Snippet: Something 的命令,其中Something 是description(如果存在,则为文件名)。
在任何一种情况下,您都可以通过应用scope 使 sn-p/completion 仅适用于某些类型的文件;要确定适当的范围,请将光标放在文件中适当的位置并选择Tools > Developer > Show Scope Name...;您使用的显示范围越多,它就变得越具体。通常只需要诸如text.html 之类的顶层就可以了,除非您正在做一些特别的事情。