如何添加自动完成的Sublime Text 3

时间:2018-04-02 19:08:25

标签: html sublimetext3 key-bindings

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

示例:html+tab自动完成文档类型块。

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

偏好设置&gt;键绑定&gt;默认(OSX).sublime-keymap - 用户

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

  1. 新密钥绑定会覆盖所有其他自动完成
  2. 最初的 col 或字符仍然在前面 生成标签。 col<div class="col-">
  3. 添加此类密钥绑定的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

执行此类操作的正确方法是使用snippetscompletions。虽然存在一些差异,但一般来说它们最终都以相同的方式工作,您选择哪一个取决于您想要创建的项目数量以及您希望它们的复杂程度。

使用代码段,您可以从菜单中选择Tools > Developer > New Snippet...并填写代码段模板,然后将其保存为Sublime默认位置的sublime-snippet文件(即{{1}包)。

例如,根据您问题中的示例,可能如下所示:

User

Snippets是XML格式的,<snippet> <content><![CDATA[ <div class="col-$0"> ]]></content> <description>Insert DIV with column class</description> <tabTrigger>col</tabTrigger> <scope>text.html</scope> </snippet> ![CDATA[之间的所有内容都插入到缓冲区中(即使您认为不需要它,也不要删除]]; Sublime如果你这样做,将忽略该片段。

CDATA指定您希望成为该代码段触发器的文字,tabTrigger说明代码段应触发的文件类型,并显示scope在自动完成面板中的代码段旁边。

在摘录中,descriptiontabTriggerscope都是可选的。如果未指定description,则只能从命令选项板或tabTrigger命令(例如,在键绑定中)展开代码段。如果没有insert_snippet,则代码段随处可用,如果没有scope,则表单中没有说明。

如果您有许多此类项目要添加片段,您也可以使用完成。这些文件存储在扩展名为description的JSON文件中,应保存在sublime-completions包中(如果您不知道它在哪里,请使用User

此类文件的一个示例是:

Preferences > Browse Packages...

在此格式中,{ "scope": "text.html", "completions": [ { "trigger": "col\tInsert DIV with column class", "contents": "<div class=\"col-$0\">" }, ] } 始终是要触发的文本,并且trigger键中的\t字符将描述(仍然是可选的)与触发器分开。

在完成时,您只在顶部而不是每次都指定范围,但在完成和片段之间存在一些功能差异。

  1. 每个trigger文件只能有一个代码段,但sublime-snippet文件可以在一个文件中包含多个完成内容; sublime-completions键是一个数组,因此您可以在同一个文件中放置多个完成。

  2. 完成是JSON,因此多行或包含JSON特定字符(如completions字符的内容)更难输入;对于较短的序列,完成更好,而对于更复杂的事情,片段更好。

  3. 当自动填充触发时,如果有"completion可以自动完成,snippet总是“赢”并插入,而完成周期。这意味着,例如在此特定示例中,您需要按两次 Tab ,因为snipptets也是标记的名称。

  4. 片段自动出现在命令面板中(当它们应用时)但完成时不会出现。在命令面板中,代码段显示为col之类的命令,其中Snippet: SomethingSomething(如果存在)和文件名(如果不存在)。

  5. 在任何一种情况下,您都可以通过应用description使代码段/完成仅适用于某些类型的文件;要确定适当的范围,请将光标放在适当位置的文件中,然后选择scope;您使用的显示范围越多,它就越具体。通常只需要Tools > Developer > Show Scope Name...这样的顶级水平,除非你做一些特别的事情。