快捷键失效主因是系统或输入法截断、插件覆盖或json语法错误;需先用sublime.log_input(true)确认按键是否进入sublime,再按加载顺序排查default→插件→user配置,并检查json格式、上下文条件及esc等硬编码行为。

Ctrl+B、Ctrl+/、Ctrl+Shift+P 没反应?90% 不是插件“坏了”,而是它悄悄覆盖了你的快捷键,且不提示、不报错、静默生效。
怎么确认按键到底进没进 Sublime?
这是所有排查的起点。跳过这步直接改配置,大概率白忙活。
- 按
Ctrl+`打开控制台,输入sublime.log_input(True)回车 - 再按你想查的组合键(比如
Ctrl+B) - 如果控制台**完全没输出**,说明按键在进 Sublime 前就被截断了:
- Windows:检查 NVIDIA 控制面板 / Intel Graphics Command Center 里的热键(尤其是
Ctrl+Alt+方向键类) - 中文输入法(搜狗、QQ 拼音)默认占用
Ctrl+Shift或Ctrl+B切软键盘——切到英文输入法再试 - macOS:系统设置 → 键盘 → 快捷键 → 关掉「Spotlight」和「输入源」里同名组合
- Windows:检查 NVIDIA 控制面板 / Intel Graphics Command Center 里的热键(尤其是
- 如果输出类似
key evt: ctrl+b,说明按键已送达,问题出在绑定层
按键进了,但功能不对?查谁在“抢”这个组合
Sublime 加载快捷键的顺序是:Default(内置)→ 插件的 Default.sublime-keymap → User.sublime-keymap。后加载者直接覆盖前一个,不警告。
- 按
Ctrl+Shift+P输入Preferences: Key Bindings,左右并排打开两个文件 - 在左侧(
Default)中搜索"ctrl+/",确认它原本应触发toggle_comment - 在右侧(
User)和所有插件目录(Packages/Vintage/、Packages/Emmet/等)中全局搜索"keys": ["ctrl+/"] - 常见高危插件:
Vintage(模拟 Vim)、Emmet、Origami、Terminus—— 它们的Default.sublime-keymap往往在你之前就绑定了 - 临时验证:运行
subl --safe-mode,如果快捷键恢复,就坐实是插件冲突
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、漏掉方括号、用了中文引号 - 保存(
Ctrl+S)后立即生效,无需重启 —— 但得确保没其他插件在更靠后位置又绑了一次相同组合
Esc 键失效?别碰 Key Bindings
关闭命令面板、搜索框、替换栏这些行为是 Sublime 内核硬编码逻辑,不走任何 .sublime-keymap 流程。
- 你在
User.sublime-keymap里加{"keys": ["escape"], "command": "hide_panel"}不仅无效,还会破坏原生逻辑(比如按 Esc 后面板卡住不隐藏) - Esc 失效时,先运行
subl --safe-mode:如果恢复,说明是插件劫持(Vintage或Origami最常见) -
Vintage用户需进Preferences → Package Settings → Vintage → Settings,设"exit_insert_mode_on_escape": false -
Origami用户则关掉其close_on_escape选项
最常被忽略的是:context 条件。同一按键在不同上下文(比如 "key": "setting.is_widget")可能绑定不同行为,表面没冲突,实则“条件性失效”。











