sublime text 括号自动配对需显式启用 auto_match_enabled: true,且语法专属设置优先级更高;emmet/vintage 插件可能拦截输入;补全与高亮(match_brackets)功能分离,验证补全是否生效应观察光标位置而非高亮。

Sublime Text 的括号自动配对不是默认“稳生效”的功能,必须显式设置 auto_match_enabled 为 true,否则它压根不运行——哪怕你什么都没动过,只要用户配置里没这行,就等于关着。
怎么确认并启用 auto_match_enabled
这个开关控制所有六组符号的自动补全:()、[]、{}、""、''、``。它和高亮无关,只决定“输不输”。
- 打开
Preferences → Settings,只看右侧「User Settings」面板 - 确保有且仅有这一行合法 JSON:
{"auto_match_enabled": true} - 如果已有其他配置,把它加进去;注意逗号位置、引号闭合,拼错成
auto_match_enable或多一个逗号都会让整段失效 - 保存(
Ctrl+S)后立即生效,不用重启、不重载、不刷新
为什么设了 true 还不补全?语法专属设置在静默覆盖
你全局设对了,但打开 config.json 或 main.py 时括号不补全,大概率是当前语法类型(右下角显示的名称)自己关掉了它——这个 Settings – Syntax Specific 的优先级比用户设置还高,且不报错、不提示。
- 打开那个不生效的文件(比如
data.json) - 点击右下角语法名(如
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
别把 match_brackets 高亮和补全搞混
auto_match_enabled 控制“输不输”,match_brackets 控制“亮不亮”。很多人开了补全却没开高亮,结果补全真发生了(光标停在两个引号中间),但另一侧没高亮,就以为没生效。
- 补全是否发生,最简单验证方式:输完
"后立刻按→(右方向键),如果光标跳到第二个"右侧,说明补全已触发 -
match_brackets默认开启,但某些语法(如 Vue、JSX)未正确定义bracketExpressions,会导致高亮失效,不影响补全逻辑
最容易被忽略的是语法专属设置的覆盖优先级——它藏在右下角语法名菜单里,不点开根本看不到。哪怕你把用户设置调得再完美,只要当前文件类型悄悄关了 auto_match_enabled,补全就永远不会发生。











