Sublime Text 用户自定义补全文件必须放在 Packages/User/ 目录下且以 .sublime-completions 结尾;JSON 格式须严格正确,scope 决定触发上下文,trigger 和 contents 支持占位符跳转。

补全文件该放在哪个目录下才生效
Sublime Text 的用户自定义补全必须放在 Packages/User/ 目录里,且文件名需以 .sublime-completions 结尾。Windows 和 macOS 的 Packages 路径不同,但都可以通过菜单栏 Preferences → Browse Packages… 快速打开。别放进 Packages/Default/ 或插件目录,那些不会被识别为用户补全源。
JSON 格式写错一个逗号就彻底失效
补全文件本质是 JSON,语法极其严格:末尾不能多逗号、字符串必须双引号、scope 和 completions 字段名大小写敏感。常见错误包括:
- 用单引号包裹字符串(如
'my_func')→ 必须用"my_func" -
completions写成completion或Completions - 忘记外层大括号
{},或漏掉scope字段(即使想全局生效也得写"scope": "")
建议用 VS Code 或 Sublime 自身(安装 JSON Reindent 插件)校验格式,保存后重启 Sublime 或按 Ctrl+Shift+P 输入 Reload Completions(如有对应命令)。
scope 值决定补全在什么语言/上下文中触发
scope 不是随便填的字符串,而是 Sublime 语法高亮所用的作用域(scope)名称。比如写 Python 补全,scope 应设为 source.python;写 HTML 中的 class 属性补全,得用 text.html.basic meta.tag.any.html string.quoted.double.html 这类嵌套 scope。查当前光标处真实 scope 的方法是:Ctrl+Shift+P → 输入 Developer: Show Scope Name。不填或填空字符串("")会让补全在所有文件中生效,但容易干扰默认行为,慎用。
trigger 和 contents 的行为差异影响实际体验
补全项中的 trigger 是你输入时激活补全的关键字(如 log),contents 是插入的文本。关键点:
-
contents支持占位符,如"console.log(${1:message});$0,其中$1是第一个跳转位置,$0是最终光标停靠点 - 如果
trigger包含点号(如arr.push),Sublime 默认不触发——因为点号不在单词字符集内;需在设置里加"word_separators": "./\\()\"'-:,.;~!@#$%^&*|+=[]{}`~?"并移除. - 多个补全项的
trigger相同会覆盖,后加载的生效(按文件名 ASCII 排序,不是按修改时间)
真正难调的其实是 scope 精确性和占位符跳转逻辑,改完记得在对应语法文件里实际敲几遍 trigger,看光标停在哪、是否重复补全、有没有意外吞掉已有字符。










