User.sublime-keymap写错JSON就会静默失效,因该文件是纯JSON数组,语法零容错:必须用英文双引号、数组和对象末尾不能多逗号、不支持注释,保存后才生效。

User.sublime-keymap 文件写错 JSON,Sublime 就会静默忽略整段配置,不报错也不生效——这是 90% 的“热键配置失败”真实原因。
为什么改了快捷键没反应?JSON 格式错一点就全废
Sublime 的 User.sublime-keymap 是纯 JSON 数组,不是 JS、不是配置文件,语法容错率为零。一个标点错误,整份绑定立刻失效,右下角只闪一下红字提示,极易被忽略。
- 必须用英文双引号:写成
"keys",不能是keys或“keys”(中文引号) - 数组末尾不能多逗号:
["ctrl+alt+f"],是错的,["ctrl+alt+f"]才对 - 对象末尾也不能多逗号:
{"keys": ["f5"], "command": "build"},→ 逗号必须删 - 不支持任何注释:
//或/* */直接导致解析失败,要禁用某条绑定,只能删整行,或改成"command": "not_a_real_command" - 修改后必须按
Ctrl+S保存,Sublime 才会重载;不保存 = 没写
怎么快速验证自己写的 JSON 是否合法?
别靠肉眼检查。最稳的方法是把内容粘贴到任意在线 JSON 验证器(如 jsonlint.com),或直接在 Sublime 控制台里测试:
- 按
Ctrl+`打开控制台 - 输入
import json; json.loads('''[你的整个 User.sublime-keymap 内容]'''),回车 - 如果报
JSONDecodeError,说明哪一行哪个字符错了,错误信息会定位到具体位置
常见报错如 Expecting property name enclosed in double quotes,基本就是漏了引号或用了中文符号。
插件自带的 Default.sublime-keymap 也会影响你的配置
Sublime 加载顺序是:Default(内置)→ 插件的 Default.sublime-keymap → User.sublime-keymap。后加载者覆盖前加载者,且不提示。
- 按
Ctrl+Shift+P输入Preferences: Key Bindings,左右并排打开两个文件 - 左侧搜你要配的组合键(如
ctrl+/),确认它原本绑定的是toggle_comment - 右侧(User)和所有插件目录(
Preferences → Browse Packages)里全局搜索同一"keys"字段,看谁最后定义了它 - 高危插件:Vintage、Emmet、Origami、SideBarEnhancements —— 它们的
Default.sublime-keymap常偷偷覆盖常用键
context 条件写错,快捷键就“看起来没反应”
加了 context 是为了精准触发,但写错条件等于设了个永远不满足的锁。
- 比如写
{"key": "selector", "operand": "source.python"},但当前文件右下角显示的是Plain Text,那这条绑定永远不会执行 - 查真实 scope:按
Ctrl+Shift+P→ 输入Show Scope Name,光标所在位置的实际语法标识会显示在状态栏 -
selection_empty、auto_complete_visible这类布尔值 context,必须写true/false,不能写"true"(字符串) - 多个 context 要同时满足,逻辑是 AND,不是 OR;想做 OR 判断,得靠插件或宏文件,原生不支持
最常被忽略的是:你写的快捷键可能根本没进 Sublime —— 先用 sublime.log_input(True) 确认按键是否送达,再查绑定。Esc、Tab 这类键甚至不在 Key Bindings 管辖范围内,硬加也没用。











