Sublime Text补全无内置权重排序,仅按匹配位置、前缀相似度和频次排序;需设"auto_complete_commit_on_tab":true才使Tab确认补全;静态置顶靠.sublime-completions文件,语义排序依赖LSP服务端配置;语法标识正确是前提。

auto_complete 本身不支持“补全权重”或“首选字符”排序——Sublime Text 没有内置的优先级打分机制(比如把 console.log 排在 console.table 前面),它只按匹配位置 + 字符串前缀相似度 + 文件内出现频次做简单排序。所谓“设置首选字符”,实际是通过配置触发逻辑、过滤范围和插件行为来间接影响你看到的第一个补全项。
为什么按 Tab 总是补全错的项?检查 auto_complete_commit_on_tab
默认情况下,Sublime 的 Tab 键不确认补全,只是插入制表符。如果你发现按 Tab 后没选中高亮项,而是缩进了代码,说明这个关键开关没开。
-
"auto_complete_commit_on_tab": true必须显式写入用户设置(Preferences → Settings 右侧) - 不设它,即使弹出补全框,
Tab也无效;必须用Enter或鼠标点选 - 搭配
"auto_complete_with_fields": true才能支持字段占位符(如log${1:msg}中的${1:...})
{
"auto_complete": true,
"auto_complete_commit_on_tab": true,
"auto_complete_with_fields": true,
"auto_complete_delay": 30
}
如何让某个函数/变量更“靠前”?用 sublime-completions 静态置顶
.sublime-completions 文件可强制把特定补全项排在最前面,但它只做静态文本替换,不能动态推导参数或类型——适合高频模板,不适合语义补全。
- 文件路径:
Packages/User/your_lang.sublime-completions(例如javascript.sublime-completions) - 补全项顺序 = 数组顺序,越靠前越优先显示
- 必须指定
"scope"匹配当前语法(右下角显示的语法名,如source.js)
{
"scope": "source.js",
"completions": [
{ "trigger": "log", "contents": "console.log(${1:obj});" },
{ "trigger": "err", "contents": "console.error(${1:msg});" }
]
}
⚠️ 注意:这个文件对
console.后续补全(如输入c再按Tab)无效——它只响应你明确敲出的trigger(如log)。
想真正控制 Python/JS 补全顺序?靠语言服务器的 completion 配置
只有 LSP 插件(如 LSP-pyright 或 LSP-typescript)能读取类型信息并按语义排序。但 Sublime 不提供 UI 调整“权重”,只能通过服务端配置间接干预。
- Pyright 支持
"includeInSuggestions"和"sortText"字段(需自定义 server 配置) - 常见做法是禁用低相关项:例如在
LSP-pyright.sublime-settings中加"stubs": false减少第三方库干扰 - 确保
"auto_complete_selector"包含source.python,否则 LSP 补全不会触发
// LSP-pyright.sublime-settings(仅示例片段)
{
"settings": {
"pyright.disableLanguageServices": false,
"pyright.stubs": false,
"pyright.includeInSuggestions": true
}
}
容易被忽略的关键点:语法高亮决定一切
所有智能补全(LSP、Jedi、自定义 completions)都依赖右下角显示的语法标识(如 Python、JavaScript)。如果它显示的是 Plain Text 或 Unsupported Syntax,再好的配置也白搭。
- 手动设置语法:
Ctrl+Shift+P→ 输入Set Syntax: Python - 检查文件扩展名是否被正确识别(
.pyvs.PY,大小写敏感) - 某些项目根目录有
.sublime-project,可能覆盖全局语法设置
补全不是“装完插件就生效”,而是“语法对了 → LSP 启动 → 服务器加载 → 补全列表生成”。漏掉第一步,后面全是空转。










