tab 键不能选中补全项是因为 auto_complete_commit_on_tab 默认为 false,需同时设置 auto_complete 和 auto_complete_commit_on_tab 为 true;若用 lsp 且补全含占位符,还需启用 auto_complete_with_fields。

Tab 键为什么不能选中补全项?
默认情况下按 Tab 不会确认高亮的补全项,而是插入制表符——这是最常卡住用户的起点。根本原因在于 auto_complete_commit_on_tab 默认是 false。
必须同时满足两个条件:
-
auto_complete设为true(否则补全框根本不弹) -
auto_complete_commit_on_tab设为true
如果用了 LSP 插件(如 LSP-typescript),这个设置依然生效;但若服务端返回带占位符的补全(如 console.log(${1:msg})),还需额外开启 auto_complete_with_fields,否则 Tab 会跳过占位符直接插入空格。
怎么让 . 或 : 成为触发字符?
Sublime 原生不监听 . 或 : 自动弹窗,除非你显式配置 auto_complete_triggers。
常见有效写法:
- JS 中输入点号后触发:
{"selector": "source.js", "characters": "."} - CSS 中冒号后补全值:
{"selector": "source.css", "characters": ":"} - HTML 中输入
补全标签:<code>{"selector": "text.html", "characters": "
注意:auto_complete_selector 必须匹配当前文件语法作用域(右下角显示“CSS”或“JavaScript”才算生效),若显示 Plain Text,所有触发规则都会静默失效。
auto_complete_delay 设多少才不卡又不滞后?
这个值不是越小越好,本质是防抖窗口:设太低(如 5)会导致频繁中断、UI 卡顿;设太高(如 800)则明显滞后。
真实项目中的推荐区间:
- 纯原生补全(仅当前文件单词):
30–50可行,但误触发多 - 中等规模项目(含
src/、tests/,无node_modules):120是平衡点 - 含
node_modules或 Python 虚拟环境的大项目:200–300更稳,给语言服务器留出解析时间
如果你同时启用了多个 LSP 服务(比如 Python + TypeScript),建议统一设为 250,避免某一个服务拖慢全局响应。
为什么改了设置还是没反应?三个关键排查点
多数“设置无效”问题其实和参数本身无关,而是底层机制被阻断:
- 右下角语法标识不是目标语言(例如写 JS 却显示
Plain Text),auto_complete_selector直接跳过该文件 - 项目里存在
node_modules或__pycache__,索引卡死导致所有补全类操作变慢——此时调delay没用 - 用了 LSP 插件但状态栏左下角没有显示
LSP: ready,说明语言服务器根本没起来;打开控制台(Ctrl+`)搜lsp或error查具体失败原因
真正影响体验的,往往不是那个毫秒级的延迟数字,而是 Sublime 正在后台扫描你根本不会去补全的几千个 .js 文件。调参前,先关掉那些它“不该干的活”。











