确认快捷键被哪个插件劫走:先执行sublime.log_input(true),有key evt输出说明按键进入sublime;再执行sublime.log_commands(true),若显示command: emmet_expand_abbreviation等非预期命令,即为对应插件覆盖。

插件导致的快捷键冲突,90% 不是配置没生效,而是你写的绑定被后加载的插件静默覆盖了——Sublime 根本没执行你那条规则。
怎么确认快捷键被哪个插件劫走了
别猜,让 Sublime 自己说。按 Ctrl+` 打开控制台,输入 sublime.log_input(True) 回车,再按那个失效组合键(比如 Ctrl+/)。如果控制台有输出(如 key evt: ctrl+/),说明按键进了 Sublime;接着输 sublime.log_commands(True),再按同一组合键,控制台会显示实际执行的命令,比如 command: emmet_expand_abbreviation——这就坐实是 Emmet 在抢。
- 输出为空 → 按键被系统/输入法/显卡驱动截断,和插件无关
- 有
key evt但没对应功能 → 插件覆盖了原生命令 - 有
command:输出 → 看见谁在执行,直接去查那个插件的Default.sublime-keymap
为什么删了 User 里的绑定,快捷键还是不对
因为 Sublime 加载顺序是:Default → 插件自带的 Default.sublime-keymap → User.sublime-keymap。你删掉 User 里的一行,但 Packages/Vintage/Default.sublime-keymap 或 Packages/Emmet/Default.sublime-keymap 里还有一模一样的 "keys": ["ctrl+/"],它照样生效,且优先级比你的 User 高。
- 打开
Preferences → Browse Packages,进每个插件文件夹翻Default.sublime-keymap - 重点盯
Vintage、Emmet、Origami、SideBarEnhancements - 用
Ctrl+Shift+P输入Package Control: Disable Package,逐个关插件验证 - 临时启动安全模式:
subl --safe-mode,如果这时快捷键恢复,就是插件问题
User.sublime-keymap 写错 JSON 就等于没写
这个文件是纯 JSON 数组,不是配置文件,也不是 JS 对象。一个标点错,整份配置就被 Sublime 静默忽略——右下角红字提示一闪而过,极易错过。
- 所有键名和字符串值必须用英文双引号:
"keys"不是keys,"toggle_comment"不是toggle_comment - 数组结尾不能多逗号:
["ctrl+alt+f"],是错的,["ctrl+alt+f"]才对 - 不支持
//注释;要临时禁用某条绑定,改成无效命令:"command": "not_a_real_command" - 保存(
Ctrl+S)后立即生效,但前提是没其他插件在更靠后的位置又绑了一次
Esc、Tab 这类键根本不在 Key Bindings 管辖范围内
Esc 关搜索框、关命令面板、关替换栏,是 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 -
Tab被 Emmet 接管?修复代码必须写进Preferences → Key Bindings右侧的User文件,不能粘贴到 Emmet 自己的 Key Bindings 设置页里











