auto_match_enabled必须设为true且语法专属设置不覆盖,否则括号自动配对不触发;Emmet和Vintage可能劫持输入;它控制补全而非高亮,高亮由match_brackets控制。

auto_match_enabled 必须设为 true,否则括号自动配对完全不触发——它不是“默认稳生效”,而是“你没写,它就当不存在”。
为什么改了 User Settings 还是不补全?语法专属设置在静默覆盖
即使你在 Preferences → Settings 右侧用户配置里写了 "auto_match_enabled": true,只要当前文件(比如 config.json)被识别为 JSON 语法,就可能被 Settings – Syntax Specific 覆盖。这个设置优先级比用户配置还高,且不报错、不提示。
- 打开那个不生效的文件,右下角点击语法名(如
JSON),选Settings – Syntax Specific - 检查右侧是否有
"auto_match_enabled": false:有就删掉,或改成true - 如果右侧为空,直接加一行:
"auto_match_enabled": true - 保存后立即生效,无需重启
按 ( 或 " 没反应?Emmet 和 Vintage 正在劫持输入
这两个插件会直接拦截按键事件:Emmet 把 {、[、" 当作缩写前缀处理;Vintage(vi 模式)把单引号 ' 当作命令触发符。它们吃掉了原始输入,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
auto_match_enabled 和 match_brackets 是两回事,别混淆
auto_match_enabled 控制“输不输”——你敲 (,它决定要不要自动补 );match_brackets 控制“亮不亮”——光标停在括号上时,另一侧是否高亮。很多人开了补全却没开高亮,结果补全真发生了,自己却以为没用。
-
match_brackets默认开启,但某些语法(如 Vue、JSX)未正确定义bracketExpressions,会导致高亮失效 - 若想确认补全是否发生,可手动输入
(后立刻按→:如果光标跳到)右侧,说明补全已生效 - 高亮颜色太淡?通常是主题未定义好
meta.bracescope,不是配置问题
最容易被忽略的是:语法专属设置的覆盖优先级最高,而且它藏在右下角语法名菜单里,不点开根本看不到。哪怕你把用户设置调得再完美,只要当前语法类型悄悄关了 auto_match_enabled,补全就永远不会发生。
















