Sublime如何自定义代码补全字典 Sublime用户自定义补全文件【进阶】

9次阅读

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

Sublime如何自定义代码补全字典 Sublime用户自定义补全文件【进阶】

补全文件该放在哪个目录下才生效

sublime text 的用户自定义补全必须放在 Packages/User/ 目录里,且文件名需以 .sublime-completions 结尾。windows 和 macOS 的 Packages 路径不同,但都可以通过菜单栏 Preferences → Browse Packages… 快速打开。别放进 Packages/default/ 或插件目录,那些不会被识别为用户补全源。

json 格式写错一个逗号就彻底失效

补全文件本质是 JSON,语法极其严格:末尾不能多逗号、字符串必须双引号、scopecompletions 字段名大小写敏感。常见错误包括:

  • 用单引号包裹字符串(如 'my_func')→ 必须用 "my_func"
  • completions 写成 completionCompletions
  • 忘记外层大括号 {},或漏掉 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,看光标停在哪、是否重复补全、有没有意外吞掉已有字符。

text=ZqhQzanResources