如何在Sublime Text 3中添加自定义自动完成功能?

时间:2014-06-12 18:27:49

标签: autocomplete sublimetext sublimetext3 code-completion

如何在Sublime Text 3中添加自定义自动完成功能?

可能重复的问题是here

有一个很好的答案,但不是很完整。阅读官方文档(Sublime Text Unofficial Documentation - 扩展Sublime Text - completionssnippets),我仍然想知道如何实现自定义HTML标记自动完成。

我想要的是以下内容。

  1. 当我把

    eq(+tab)
    

    ,我希望

    <eq>(Cursor)</eq>
    

    弹出。 (这对我单独保存的多个Snippet .sublime-snippet文件非常有用。)

  2. 当我把

    eq{\alpha \beta \int}(+tab)
    

    ,我希望

    <eq>\alpha \beta \int(Cursor position)</eq>
    

    弹出。在这种情况下,'\'被转义,光标位置在开头,所以

    <eq>(Cursor position)alpha beta int</eq>
    

    是poped。因为我想在这个标签中渲染'TeX'等式,即数学,所以会产生奇怪和不舒服的结果。

  3. 当我把

    eqq(+tab)
    

    ,我希望

    <eqq>
    (tab indented)(Cursor)
    </eqq>
    

    是poped。 (这对我单独保存的多个Snippet .sublime-snippet文件非常有用。)

  4. 当我把

    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'。

  5. 实现这些自动完成的最简单方法是在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,我可以修复意外的转义\问题。

1 个答案:

答案 0 :(得分:-2)

1-如果您需要,您可以随时添加插件以获取崇高文本。它叫做Emmet,你可以在Emmet web page

找到它

它易于使用,例如写div + crtl + e,你会得到<div></div>。使用它的另一种方法是放置div.tagId + crtl + e,然后你得到<div id='tagId'> <div>;如果你想要不止一个,你只需输入div * 2和相同的键组合,你就会获得两个div。

对于其他问题,我不知道如何解决它们。