快捷键失效90%是按键未进入编辑器或被覆盖;先用sublime.log_input(true)确认按键是否送达,再按加载顺序排查default、插件、user绑定冲突,注意json语法和esc硬编码特性。

快捷键没反应,90% 不是 Sublime 坏了,而是按键根本没进编辑器,或被后加载的绑定静默覆盖。
先确认按键是否进入 Sublime
这是所有排查的第一步,跳过它直接改配置等于白忙活。按 Ctrl+` 打开控制台,输入 sublime.log_input(True) 回车,再按你怀疑失效的组合键(比如 Ctrl+B、Ctrl+Shift+P)。如果控制台完全没输出,说明信号被系统或外围软件截断:
- Windows 用户重点检查 NVIDIA 控制面板、Intel Graphics Command Center 的热键设置,以及搜狗/QQ 拼音默认占用的
Ctrl+B或Ctrl+Shift切换 - macOS 用户去「系统设置 → 键盘 → 快捷键」,关掉「Spotlight」和「输入源」里同名组合(哪怕你不用
Cmd+Space,它也可能干扰事件分发)
按键进了,但没触发命令?查加载顺序和覆盖者
如果控制台输出类似 key evt: ctrl+b,说明按键已送达,问题出在绑定层。Sublime 加载快捷键的顺序固定为:Default.sublime-keymap → 插件自带的 Default.sublime-keymap → User.sublime-keymap。后加载者会覆盖前加载者,且不报错。
- 按
Ctrl+Shift+P输入Preferences: Key Bindings,左右并排打开两个文件 - 在左侧(Default)搜索你想用的组合,比如
"ctrl+/",确认它原本对应toggle_comment - 在右侧(User)和所有插件目录(
Preferences → Browse Packages)里全局搜索同一"keys"字段——Vintage、Emmet、Origami这些插件常在这里偷偷重绑 - 临时验证:运行
subl --safe-mode,如果快捷键恢复,就坐实是插件冲突
User.sublime-keymap 写错 JSON 就等于没写
这个文件是纯 JSON 数组,语法错一点整份配置就静默失效,右下角红字提示一闪而过,极易忽略。
- 必须用英文双引号:
"keys"不是keys,"command"不是command - 数组末尾不能多逗号:
["ctrl+alt+f"],是错的,["ctrl+alt+f"]才对 - JSON 不支持注释;想禁用某条绑定,要么删整行,要么改成无效命令:
"command": "not_a_real_command" - 保存后立即生效,无需重启,但得确保没其他插件在更靠后位置又绑了一次相同组合
Esc 键不走 keymap 流程,别往 User 里加绑定
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选项 - 若安全模式下仍无效,且
sublime.log_input(True)无输出,问题可能在 macOS 未勾选「使用 F1、F2 等键作为标准功能键」或键盘固件层
真正关键的不是“怎么改”,而是“谁在管”——sublime.log_input(True) 和 sublime.log_commands(True) 是唯一穿透所有层级的日志开关,其余所有插件级检测都可能漏掉 context 不匹配、动态注册或系统劫持的情况。











