auto_match_enabled未开启是补全失效的首要原因,必须在User Settings或语法专属设置中显式设为true,且需排除JSON格式错误、Emmet/Vintage插件拦截及match_brackets高亮混淆等问题。

auto_match_enabled 没开,补全根本不会发生
Sublime 的括号、引号自动补全不是“默认就工作”的功能,它完全依赖 auto_match_enabled 这个开关。哪怕默认设置里写着 true,只要你在 User Settings 里没显式写这一行,或者写成了 false 或拼错成 auto_match_enable,它就彻底静默——连尝试都不会有。
打开 Preferences → Settings,只看右侧「User Settings」面板,确保包含且格式正确:
{"auto_match_enabled": true}
常见错误包括:多一个逗号、引号不闭合、整个 JSON 被注释掉、或混在其他配置里但键名拼错。保存(Ctrl+S)后立即生效,无需重启。
JSON/Python/Markdown 文件里不生效?语法专属设置在偷偷关掉它
auto_match_enabled 在语法专属设置(Syntax Specific Settings)里的优先级比用户设置还高,而且不报错、不提示,容易静默覆盖。
打开一个不补全的文件(比如 config.json),点击右下角语法名(如 “JSON”),选择 Settings – Syntax Specific:
- 如果右侧已有
"auto_match_enabled": false,删掉或改成true - 如果右侧为空,直接加一行:
"auto_match_enabled": true
这个设置只影响当前语法类型(所有 .json 文件),不影响其他语言。切到 Plain Text 测试能补全,说明问题出在语法包本身,不是 Sublime 核心问题。
输入(或"没反应?Emmet 和 Vintage 正在劫持按键
Emmet 把 { 当 CSS 缩写前缀,Vintage 把 ' 当命令触发符——它们会直接拦截原始按键事件,导致 auto_match_enabled 根本没机会执行。
临时验证方法:菜单栏 Preferences → Package Control → Disable Package,逐个禁用 Emmet 和 Vintage,再试输入。
长期方案不是卸载,而是兼容配置:
- Emmet 用户:在其用户设置中加
"disable_auto_insertion": true - Vintage 用户:在 Preferences → Package Settings → Vintage → Settings – User 中加
"vintage_start_in_command_mode": false
特别注意:Emmet 在 HTML/JS 文件中对 (、" 有高优先级响应,此时原生补全逻辑完全无入口。
补全发生了但你没看见?别和 match_brackets 高亮搞混
auto_match_enabled 控制“输不输”(敲 ( 时要不要自动补 )),而 match_brackets 控制“亮不亮”(光标停在括号上时另一侧是否高亮)。两者完全独立。
常见错觉:开了补全但没开高亮,结果 " 真补出了 "",光标也停在中间,你却以为没生效——因为没高亮反馈。
补全行为本身有明确限制:
- 只在空位置触发:写完
if (x > 0)再按{不会补;光标在空白行或参数里敲(才会 - 仅对六组英文半角符号生效:
()、[]、{}、""、''、`` - 不在字符串或注释内触发(这是预期行为,避免干扰字面量)
最常被忽略的一点:补全是否触发,和文件后缀是否关联对语法强相关。右下角语法名显示为 Plain Text,那所有补全都会退化——手动切换语法比反复调配置更直接有效。

















