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

kip*_*pid 5 autocomplete code-completion sublimetext sublimetext3

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

可能重复的问题在这里

有一个很好的答案,但不是很完整。并且阅读官方文档(Sublime Text Unofficial Documentation - Extending Sublime Text - completions and snippets),我还在想如何实现我自定义的HTML标签自动完成。

我想要的是下面的。

  1. 当我放

    eq(+tab)
    
    Run Code Online (Sandbox Code Playgroud)

    , 我预计

    <eq>(Cursor)</eq>
    
    Run Code Online (Sandbox Code Playgroud)

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

  2. 当我放

    eq{\alpha \beta \int}(+tab)
    
    Run Code Online (Sandbox Code Playgroud)

    , 我预计

    <eq>\alpha \beta \int(Cursor position)</eq>
    
    Run Code Online (Sandbox Code Playgroud)

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

    <eq>(Cursor position)alpha beta int</eq>
    
    Run Code Online (Sandbox Code Playgroud)

    弹出。结果是奇怪和不舒服,因为我想在这个标签中渲染“TeX”方程,即数学。

  3. 当我放

    eqq(+tab)
    
    Run Code Online (Sandbox Code Playgroud)

    , 我预计

    <eqq>
    (tab indented)(Cursor)
    </eqq>
    
    Run Code Online (Sandbox Code Playgroud)

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

  4. 当我放

    eqq{\alpha \beta \gamma \frac{1}{2}}(+tab)
    
    Run Code Online (Sandbox Code Playgroud)

    , 我预计

    <eqq>
        \alpha \beta \gamma \frac{1}{2}(cursor position at the end of Tex Equation)
    </eqq>
    
    Run Code Online (Sandbox Code Playgroud)

    弹出。在这种情况下, '\' 也被转义,并且没有添加 '\n\t'(换行符,制表符),以便

    <eqq>(cursor position)alpha beta gamma frac{1}{2}</eqq>
    
    Run Code Online (Sandbox Code Playgroud)

    弹出。和

    eqq{}(+tab)
    
    Run Code Online (Sandbox Code Playgroud)

    变成

    <eqq>(Cursor position)</eqq>
    
    Run Code Online (Sandbox Code Playgroud)

    . 与 不同eqq(+tab),没有 '\n\t'。

实现这些自动完成的最简单方法是HTML.sublime-completionsSublime 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>" }
    ]
}
Run Code Online (Sandbox Code Playgroud)

. 但是tab未启用触发,尽管我Preferences - Settings - User包括与选项卡相关的功能,例如

{
    [
        "Vintage",
        "BracketHighlighter",
        "SideBarEnhancements"
    ],
    "tab_completion": true,
    "tab_size": 2,
    "translate_tabs_to_spaces": false,
    "use_tab_stops": false,
}
Run Code Online (Sandbox Code Playgroud)

. 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>
Run Code Online (Sandbox Code Playgroud)

. 在这种情况下,仅<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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

eqqBraces.sublime-snippet文件中。但这些也不能完全解决我的问题。

我也在sublime User Echo 中问过这个问题。谁知道这个问题,请回答我。

我试过类似的东西${1/\\/\/}。但这也行不通。不舒服地使用 double \like eq{\\alpha \\beta \\gamma},我可以解决意外的转义 \ 问题。

Mat*_*ias -3

1-如果您愿意,您可以随时添加 Sublime Text 插件。它称为 Emmet,您可以在Emmet 网页上找到它

使用起来很简单,例如编写 div + crtl + e 你会得到<div></div>. 另一种使用它的方法是输入 div.tagId + crtl + e 你会得到<div id='tagId'> <div>; 如果您想要多个 div,只需键入 div*2 和相同的组合键,您就会得到两个 div。

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