先确认按键是否进入sublime:执行sublime.log_input(true)后无输出说明被系统/输入法/驱动截断;有输出则按加载顺序排查default→插件default→user绑定覆盖、json语法错误或context不匹配。

Sublime Text 里多个插件热键冲突,不是靠“重装插件”或“删配置”能解决的——核心在于你根本不知道哪个绑定在生效、谁覆盖了谁、甚至按键压根没进编辑器。
怎么确认 Ctrl+B 或 Ctrl+/ 真的进了 Sublime?
这是所有排查的起点。按 Ctrl+` 打开控制台,输入 sublime.log_input(True) 回车,再按你想查的组合键(比如 Ctrl+B)。如果控制台完全没输出,说明信号被拦在门外:
- Windows 用户重点检查 NVIDIA 控制面板或 Intel Graphics Command Center 里的「热键」设置(尤其是
Ctrl+Alt+方向键类) - 搜狗、QQ 拼音等输入法默认占用
Ctrl+Shift+B或Ctrl+B切软键盘——切到英文输入法再试一次 - macOS 用户去「系统设置 → 键盘 → 快捷键」,关掉「Spotlight」的
Cmd+Space和「输入源」里的同名切换键(哪怕你不用,它也可能干扰事件分发)
按键进了 Sublime,但功能不对:谁在偷偷改命令?
如果控制台输出类似 key evt: ctrl+b,说明按键已送达,问题出在绑定层。Sublime 加载快捷键的顺序是:Default(内置)→ 插件自带的 Default.sublime-keymap → User(你写的)。后加载者静默覆盖前一个,不报错也不提示:
- 按
Ctrl+Shift+P输入Preferences: Key Bindings,左右并排打开两个文件 - 在左侧(
Default)搜"ctrl+b",确认原命令是build - 在右侧(
User)和所有插件目录(Preferences → Browse Packages)里全局搜索"ctrl+b",看谁最后定义了它 - 高危插件优先禁用:
Vintage、Emmet、Terminus、ShellCommand—— 用Package Control: Disable Package逐个关掉测试
User.sublime-keymap 写错一个标点就等于没写
你在 Key Bindings – User 里写的任何规则,只要 JSON 错一点,整段都会被 Sublime 静默忽略,且右下角红字提示一闪而过,极易错过:
- 必须用英文双引号,不能用中文引号或单引号:
{"keys": ["ctrl+b"], "command": "build"} - 数组末尾不能多逗号:
["ctrl+b"],是错的,["ctrl+b"]才对 - JSON 不支持注释;想禁用某条绑定,要么删整行,要么改成无效命令:
"command": "not_a_real_command" - 改完必须按
Ctrl+S保存,Sublime 会立即重载——但若某个插件的Default.sublime-keymap里也有同keys且加载更晚,你的自定义仍会被盖掉
Esc、Cmd+B 这类键根本不在 keymap 流程里
Esc 关闭搜索框、命令面板、替换栏,是 Sublime 内核硬编码行为,不走任何 .sublime-keymap 流程。你在 User.sublime-keymap 里加 {"keys": ["escape"], "command": "hide_panel"} 不仅无效,还会破坏原生逻辑:
-
Cmd+B在 macOS 上常被 Finder 或 Dock 的系统级快捷键占用,这不是插件问题,而是「应用无关快捷键」行为。排查路径是:系统设置 → 键盘 → 快捷键 → 应用快捷键,搜索Cmd+B,删掉 Finder 或 Dock 的条目即可 -
Esc失效时,先运行subl --safe-mode:如果此时恢复,说明是插件劫持(常见于Vintage、Origami);Vintage需进Preferences → Package Settings → Vintage → Settings,设"exit_insert_mode_on_escape": false
真正卡住人的地方,从来不是“怎么加新绑定”,而是“为什么旧绑定不执行”——它可能被系统吞了、被插件盖了、被 JSON 格式废了,或者压根就不归 keymap 管。











