前面两集 emmet 和 snippet 其实都是属于“补全”这个功能。 英文是 Completion 。总的参考文档 在这里

Tab 补全

Settings Defualt 下有这些内容

"tab_completion": true,

意思是打开一个文件,敲一个触发词,然后敲 tab 是能补全成一个片段的。这个没有什么陌生的,前面 snippets 一集,就属于这种情况。只不过不是唯一的一种情况。

根据 这里 的说明,tab 补全功能依次会在下面四个地方去找触发词,英文术语叫 Trigger 。

 1. Snippets
 2. 通过 API on_query_completions() 设置的内容,这个咱们暂时不管
 3. 专门的自动补全文件,也就是 xxx.sublime-completions    4. 当前文件中已经敲过的词

上面这四个地方找到的触发词都会出现在 “补全列表” 中。例如在一个 markdown 文件中,已经敲过了 test 这个单词,并且也知道前面一集也定义了 top 这个 snippet 。那么敲一下 t 如何才能看到这个补全列表呢?

Keybinding Default 中有相关设置:

{ "keys": ["ctrl+space"], "command": "auto_complete" },

意思是只要敲 ctrl+space 快捷键,就可以看到跟自动补全一样的效果了。但是我这里 ctrl+space 用来切换中文输入法了,所以要在 Keybinding User 中改一下

{ "keys": ["alt+space"], "command": "auto_complete" },

这样就可以了。如果列表中只有一项,那么直接敲快捷键就补全出来了。如果有多项,每次敲一下可以跳到下一项。选中可以敲 tab 或者 Enter 。

自定制补全文件

来说说列表中提到的第三项补全文件。看怎么来自己添加触发词。参考:Completion Files

自动补全

参考 这里

“自动补全”并不说又有了一种新的补全方式。而只是说输入了触发词,那么不用敲 tab ,就可以显示可能的触发词了,默认只要敲 Enter 就可以补全了。

这个功能也是在 Settings - Default 中默认就设置好的:

"auto_complete": true,

但是,自动补全的不是在每种文件类型中都会被触发的,Settings Default 中是这样设置的

// Controls what scopes auto complete will be triggered in
"auto_complete_selector": "source - comment, meta.tag - punctuation.definition.tag.begin",

// Additional situations to trigger auto complete
"auto_complete_triggers": [ {"selector": "text.html", "characters": "<"} ],

有一个问题是这时候,自动补全生效的时候,回车就不能用来换行了,怎么解决?

Settings Default 下面有

"auto_complete_commit_on_tab": false,

在 Setting User 中

"auto_complete_commit_on_tab": true,

这样就可以敲 tab 来补全,而 Enter 现在就可以用来输入换行了。

最后,如果觉得还是补全的不够丰富,可以看看 http://sublimecodeintel.github.io/SublimeCodeIntel/