如何在Sublime Text 3中添加自定义自动完成功能?
可能重复的问题是here。
有一个很好的答案,但不是很完整。阅读官方文档(Sublime Text Unofficial Documentation - 扩展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>
是poped。因为我想在这个标签中渲染'TeX'等式,即数学,所以会产生奇怪和不舒服的结果。
当我把
eqq(+tab)
,我希望
<eqq>
(tab indented)(Cursor)
</eqq>
是poped。 (这对我单独保存的多个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>
是poped。在这种情况下,'\'也被转义,并且没有添加'\ n \ t'(换行符,制表符)以便
<eqq>(cursor position)alpha beta gamma frac{1}{2}</eqq>
是poped。和
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>
<{1>}文件中的和
eq.sublime-snippet
<{1>}文件中的和
<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>
<{1>}文件中的和
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>
文件中。但这些并不能完全解决我的问题。
我也在sublime User Echo中问了这个问题。任何知道此问题的人都请回答我。
我试过像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
,我可以修复意外的转义\问题。
答案 0 :(得分:-2)
1-如果您需要,您可以随时添加插件以获取崇高文本。它叫做Emmet,你可以在Emmet web page
找到它它易于使用,例如写div + crtl + e,你会得到<div></div>
。使用它的另一种方法是放置div.tagId + crtl + e,然后你得到<div id='tagId'> <div>
;如果你想要不止一个,你只需输入div * 2和相同的键组合,你就会获得两个div。
对于其他问题,我不知道如何解决它们。