先确认按键是否进入Sublime:按Ctrl+`输入sublime.log_input(True),无key evt输出说明被系统/输入法/显卡驱动截断;有输出则查绑定覆盖、插件冲突或JSON语法错误。

快捷键没反应,90% 不是配置写错了,而是按键压根没进 Sublime —— 先看控制台有没有 key evt 输出,再决定要不要动 User.sublime-keymap。
怎么确认按键是否进了 Sublime?
这是所有排查的起点。跳过这步直接改配置,基本白忙活。
- 按
Ctrl+`打开控制台,输入sublime.log_input(True)回车 - 再按你怀疑失效的组合键(比如
Ctrl+/、Cmd+Shift+P) - 如果控制台完全没输出,说明按键被系统/输入法/显卡驱动截断了 —— Sublime 根本没收到
常见拦截点:
- Windows:NVIDIA 控制面板 → 「热键」、Intel Graphics Command Center → 「快捷键」里启用了
Ctrl+Alt+方向键或Ctrl+Shift类组合 - macOS:系统设置 → 键盘 → 快捷键 →「Spotlight」或「输入源」占用了
Cmd+Space;未勾选「使用 F1、F2 等键作为标准功能键」时,Esc可能被键盘固件吞掉 - 输入法:搜狗、QQ 拼音默认用
Ctrl+Shift切语言,切英文再试
按键进了 Sublime 但功能不对,怎么查谁在抢?
有 key evt 输出,说明按键进来了;但功能异常,说明绑定被覆盖或 command 名拼错。
- 在控制台继续输
sublime.log_commands(True)回车 - 再按同一组合键,看输出的
command:是什么(比如command: emmet_expand_abbreviation) - 如果命令名不是你预期的(如
toggle_comment),就坐实是插件劫持
Sublime 加载顺序固定:Default → 插件的 Default.sublime-keymap → User.sublime-keymap。后加载者静默覆盖前一个,不报错也不提示。
- 打开
Preferences → Key Bindings,左右并排看 Default 和 User - 在左侧 Default 中搜索目标组合(如
"ctrl+/"),确认它原本应触发toggle_comment - 在右侧 User 和所有插件目录(
Packages/Vintage/、Packages/Emmet/等)中全局搜索相同"keys"字段 - 高危插件优先排查:
Vintage、Emmet、Origami、GitGutter
User.sublime-keymap 写错 JSON 就等于没写
这个文件是纯 JSON 数组,语法错一点整份配置就被 Sublime 静默忽略 —— 右下角可能只闪一下红字错误提示,稍不注意就错过。
- 必须用英文双引号:
"keys"不是keys,"command"不是command - 数组结尾不能多逗号:
["ctrl+alt+f"],是错的,["ctrl+alt+f"]才对 - 不支持
//或/* */注释;禁用某条绑定,要么删整行,要么改成"command": "not_a_real_command" - 常见低级错误:
toggle_comment写成toggle_comments、用中文引号、keys字段漏方括号
Esc 键关不了面板?别碰 Key Bindings
Esc 关命令面板、搜索框、替换栏,是 Sublime 内核硬编码行为,不走任何 .sublime-keymap 流程。
- 你在
User.sublime-keymap里加{"keys": ["escape"], "command": "hide_panel"}不仅无效,还会破坏原生逻辑 - 若
Esc失效,先运行subl --safe-mode:如果此时恢复,说明是插件劫持(常见于Vintage、Origami) -
Vintage需进Preferences → Package Settings → Vintage → Settings,设"exit_insert_mode_on_escape": false -
Origami则关掉其close_on_escape选项
真正容易被忽略的是 context 条件和平台键名映射 —— 同一个 "keys": ["super+shift+p"] 在 macOS 是 Cmd+Shift+P,在 Windows/Linux 却变成 Ctrl+Shift+P,但反过来不成立;写死 ctrl 或 cmd 就会跨平台失效。

















