Sublime Text 的 .sublime-completions 文件仅支持静态文本替换,不具语义推导能力;须置于 Packages/User/ 目录下,scope 必须匹配语法作用域(如 source.python),trigger 与 contents 需正确配置占位符,且需开启 "auto_complete": true 设置。

Sublime Text 的 .sublime-completions 文件只做静态文本替换,不能推导语义、不读取项目代码、不补参数签名——它不是 AI,也不是语言服务器,别指望它补出 os.path.join() 的括号和参数提示。
如何让自定义补全真正生效
补全文件必须放在 Packages/User/ 目录下,且文件名以 .sublime-completions 结尾;放错位置(比如 Packages/Default/ 或插件子目录)完全不会被加载。Windows 和 macOS 的 Packages 路径不同,但统一可通过 Preferences → Browse Packages… 打开。确认文件存在后,还需检查右下角语法标识:如果显示的是 Plain Text,那 scope 字段再对也白搭——补全只在匹配的语法上下文中触发。
scope 字段写不对,补全就等于没写
scope 不是语言名,而是 Sublime 内部的语法作用域(syntax scope),例如 Python 是 source.python,JavaScript 是 source.js 或 source.jsx(取决于你用的是原生 JS 还是 Babel 插件)。常见错误包括:
- 写成
"scope": "python"或"scope": "JavaScript"—— 无效 - 用了 Babel 插件但
scope没配source.js,或syntaxes没列Packages/Babel/JavaScript (Babel).sublime-syntax - 想在 HTML 的
class=""里补 CSS 类名,却把补全塞进source.css的 scope 里——那是给 CSS 文件用的,不是 HTML
trigger 和 contents 的占位符怎么用才不翻车
trigger 是你敲的前缀,contents 是补出来的文本,支持 Snippet 占位符:
-
$1、$2表示光标跳转顺序,$0是最终停留位 -
${1:default}给第一个占位符设默认值,比如console.log(${1:"msg"}); - 注意 JSON 字符串要双引号,反斜杠需转义:
"contents": "console.log(${1:\"\"});" - 别在
contents里写换行缩进空格——Sublime 会按当前缩进自动对齐,手动加空格反而错位
为什么补全不弹出来?先查这三件事
即使文件放对、scope 写准、JSON 合法,补全仍可能静默失败:
-
"auto_complete": true没在用户设置里开启——这是硬开关,关了连候选框都不出来 - 输入时没触发前缀匹配:补全框默认只匹配你已输入字符开头的
trigger,输pr不会跳出print如果 trigger 是pp - 当前视图被设为“禁用补全”模式:右键编辑区 →
Auto Complete: Disable被误点了(可再右键启用)
最常被忽略的一点:.sublime-completions 是纯前端替换,它不知道 import numpy as np 之后 np. 该列什么——这种需求必须走 LSP + 对应语言服务器,否则永远卡在“能打字,不能懂代码”的层面。

















