如何在 Sublime Text 3 中添加自定义自动完成?
可能重复的问题是 here 。
有一个很好的答案,但不是很完整。并阅读官方文档(Sublime Text Unofficial Documentation - Extending Sublime Text - completions 和 snippets ),我仍然想知道如何实现我自定义的 HTML 标签自动完成。
我想要的是下面的。
eq(+tab)
, 我预计
<eq>(Cursor)</eq>
弹出。 (这对我单独保存的多个 Snippet
.sublime-snippet
文件很有效。) eq{\alpha \beta \int}(+tab)
, 我预计
<eq>\alpha \beta \int(Cursor position)</eq>
弹出。在这种情况下, '\' 被转义,光标位置在开头,以便
<eq>(Cursor position)alpha beta int</eq>
弹出。奇怪和不舒服的结果是,因为我想在这个标签中渲染“TeX”方程,即数学。
eqq(+tab)
, 我预计
<eqq>
(tab indented)(Cursor)
</eqq>
弹出。 (这对我单独保存的多个 Snippet
.sublime-snippet
文件很有效。) eqq{\alpha \beta \gamma \frac{1}{2}}(+tab)
, 我预计
<eqq>
\alpha \beta \gamma \frac{1}{2}(cursor position at the end of Tex Equation)
</eqq>
弹出。在这种情况下, '\' 也被转义,并且没有添加 '\n\t'(换行符,制表符),以便
<eqq>(cursor position)alpha beta gamma frac{1}{2}</eqq>
弹出。和
eqq{}(+tab)
变成
<eqq>(Cursor position)</eqq>
.与
eqq(+tab)
不同,没有 '\n\t'。 实现这些自动完成的最简单方法是在
HTML.sublime-completions
文件夹中创建 Sublime Text Build 3059 x64\Data\Packages\User
文件。 (因为我在 Windows 操作系统中使用 ST3 的便携式版本,所以安装 ST3 时文件夹可能会有所不同。)用 JSON 文本填充文件{
"scope": "text.html - source - meta.tag, punctuation.definition.tag.begin",
"completions":
[
{ "trigger": "eq", "contents": "<eq>$1</eq>" },
{ "trigger": "eqq", "contents": "<eqq>\n\t$1\n</eqq>" }
]
}
.但是
tab
触发未启用,尽管我的 Preferences - Settings - User
包括与选项卡相关的功能,例如{
[
"Vintage",
"BracketHighlighter",
"SideBarEnhancements"
],
"tab_completion": true,
"tab_size": 2,
"translate_tabs_to_spaces": false,
"use_tab_stops": false,
}
.在这种情况下,仅启用
Ctrl+tab
触发。怎么了?我不知道。为了解决这些问题,我尝试了 Snippets,在
HTML.sublime-snippet
文件夹中制作 Sublime Text Build 3059 x64\Data\Packages\User
文件。我放<snippet>
<content><![CDATA[<eqq>
$0$1
</eqq>]]></content>
<tabTrigger>eqq</tabTrigger>
<scope>text.html</scope>
</snippet>
<snippet>
<content><![CDATA[<eq>$1$0</eq>]]></content>
<tabTrigger>eq</tabTrigger>
<scope>text.html</scope>
</snippet>
.在这种情况下,仅启用第一个
<snippet>
。所以我分别保存了多个片段文件。<snippet>
<content><![CDATA[<eq>$0</eq>]]></content>
<tabTrigger>eq</tabTrigger>
<scope>text.html</scope>
<description>eq tag to be rendered by MathJax</description>
</snippet>
在
eq.sublime-snippet
文件中,以及<snippet>
<content><![CDATA[<eq>$1$0</eq>]]></content>
<tabTrigger>eq{$PARAM1}</tabTrigger>
<scope>text.html</scope>
<description>eq{inline TeX equation} tag to be rendered by MathJax</description>
</snippet>
在
eqBraces.sublime-snippet
文件中,以及<snippet>
<content><![CDATA[<eqq>
$0
</eqq>]]></content>
<tabTrigger>eqq</tabTrigger>
<scope>text.html</scope>
<description>eqq tag to be rendered by MathJax</description>
</snippet>
在
eqq.sublime-snippet
文件中,以及<snippet>
<content><![CDATA[<eqq>
$1$0
</eqq>]]></content>
<tabTrigger>eqq{$PARAM1}</tabTrigger>
<scope>text.html</scope>
<description>eqq{outline TeX equations} tag to be rendered by MathJax</description>
</snippet>
在
eqqBraces.sublime-snippet
文件中。但这些也不能完全解决我的问题。我也在 sublime User Echo 中问过这个问题。谁知道这个问题,请回答我。
我试过类似
${1/\\/\/}
的东西。但这也行不通。不舒服地使用像 \
这样的双 eq{\\alpha \\beta \\gamma}
,我可以解决意外的转义\问题。 最佳答案
1- 如果您愿意,您可以随时为 sublime 文本添加插件。它叫做 Emmet,你可以在这里找到它 Emmet web page
使用起来很简单,例如写 div + crtl + e 你会得到 <div></div>
。另一种使用它的方法是将 div.tagId + crtl + e 放入,你会得到 <div id='tagId'> <div>
;如果你想要多个,你只需输入 div*2 和相同的键组合,你就会得到两个 div。
对于其他问题,我不知道如何解决。
关于autocomplete - 如何在 Sublime Text 3 中添加自定义自动完成?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24191460/