【问题标题】:How to add auto-complete Sublime Text 3如何添加自动完成 Sublime Text 3
【发布时间】:2018-04-02 19:08:24
【问题描述】:

我想添加自定义的自动完成键绑定,就像内置的:

示例:html+tab 自动完成 Doctype 块。

我尝试添加 html 自定义键绑定:输入 c + o + l + tab 以生成 <div class="col-">

Preferences > Key Bindings > Default (OSX).sublime-keymap -- 用户

{"keys": ["c+o+l+tab"], "command": "insert_snippet", "args": {"contents": "<div class=\"col-$0\">"}},
但是,有两个问题:

  1. 新的键绑定覆盖所有其他自动完成
  2. 最初的 col 或字符保留在前面 生成的标签。 col&lt;div class="col-"&gt;

添加这种类型的键绑定的正确方法是什么?

【问题讨论】:

    标签: html sublimetext3 key-bindings


    【解决方案1】:

    执行此类操作的正确方法是使用snippetscompletions。尽管存在一些差异,但总的来说,它们最终的工作方式相同,您选择哪一种取决于您要创建多少这样的项目以及您希望它们有多复杂。

    使用 sn-p,您可以从菜单中选择 Tools &gt; Developer &gt; 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 中,tabTriggerscopedescription 都是可选的。如果您没有指定tabTrigger,您只能从命令面板或通过insert_snippet 命令扩展sn-p(例如在键绑定中)。没有scope,sn-p 适用于所有地方,没有description,它在面板中没有描述。

    如果你有很多这样的项目要添加 sn-ps,你也可以使用完成来代替。它们存储在 JSON 文件中,扩展名为 sublime-completions,应保存在您的 User 包中(如果您不知道它在哪里,请使用 Preferences &gt; Browse Packages...

    这样的文件的一个例子是:

    {
        "scope": "text.html",
    
        "completions": [
            { "trigger": "col\tInsert DIV with column class", "contents": "<div class=\"col-$0\">" },
        ]
    }
    

    在这种格式中,trigger 始终是要触发的文本,并且描述(仍然是可选的)通过trigger 键中的\t 字符与触发器分隔。

    在完成中,您只需在顶部指定一次范围,而不是每次,但完成和 sn-ps 之间存在一些功能差异。

    1. 每个sublime-snippet 文件只能有一个sn-p,但一个sublime-completions 文件可以在一个文件中包含多个补全; completions 键是一个数组,因此您可以在同一个文件中放置多个完成。

    2. 补全是 JSON,因此多行或包含 JSON 特定字符(例如 " 字符)的内容更难输入;完成更适合较短的序列,而 sn-ps 更适合更复杂的事情。

    3. 当自动完成触发时,如果有一个 completion 和一个 snippet 可以自动完成,snipptets 总是“获胜”并被插入,而完成循环。这意味着例如在这个特定示例中,您需要按两次 Tab 因为col 也是标签的名称。

    4. 代码段会自动出现在命令面板中(当它们应用时),但补全不会。在命令面板中,片段显示为类似Snippet: Something 的命令,其中Somethingdescription(如果存在,则为文件名)。

    在任何一种情况下,您都可以通过应用scope 使 sn-p/completion 仅适用于某些类型的文件;要确定适当的范围,请将光标放在文件中适当的位置并选择Tools &gt; Developer &gt; Show Scope Name...;您使用的显示范围越多,它就变得越具体。通常只需要诸如text.html 之类的顶层就可以了,除非您正在做一些特别的事情。

    【讨论】:

    • 我为迟到的评论道歉。但是,您的回复非常有帮助,我最终能够添加自定义比赛。
    猜你喜欢
    • 2014-08-03
    • 2013-07-05
    • 1970-01-01
    • 1970-01-01
    • 2015-11-22
    • 1970-01-01
    • 2019-08-02
    • 2019-03-28
    • 2019-02-11
    相关资源
    最近更新 更多