Package Control 本身不绑定快捷键,但其安装的插件(如 Vintage、Emmet、Origami)自带的 Default.sublime-keymap 会优先于 User.sublime-keymap 加载,导致用户自定义快捷键被静默覆盖;排查需先用 sublime.log_input(True) 确认按键是否被系统或输入法截断,再检查各插件及 User 文件中重复绑定,并注意 JSON 语法严格性。

Package Control 本身不绑定任何快捷键,但通过它安装的插件(比如 Vintage、Emmet、Origami)几乎都会自带 Default.sublime-keymap,而这些文件在加载顺序上优先于你的 User.sublime-keymap,导致你改了也没用。
先确认按键是否进了 Sublime,再查谁劫走了它
按 Ctrl+` 打开控制台,输入 sublime.log_input(True) 回车,再按你想查的组合键(如 Ctrl+/)。
- 控制台完全没输出 → 按键被系统/输入法/显卡驱动截断,和 Package Control 或插件无关
- 有
key evt: ctrl+shift+k这类日志 → 按键进来了,问题出在 Sublime 内部绑定冲突
Windows 用户重点检查 NVIDIA 控制面板或 Intel Graphics Command Center 的热键设置;macOS 用户检查「系统设置 → 键盘 → 快捷键 → 输入源」是否占用了 Cmd+Space 或 Ctrl+Space;中文输入法默认拦截 Ctrl+Shift,切英文再试。
加载顺序决定谁说了算:Default → 插件 → User
Sublime 的快捷键按固定顺序加载:Default.sublime-keymap(内置)→ 各插件目录下的 Default.sublime-keymap → User.sublime-keymap。后加载的条目静默覆盖前一个,不报错也不提示。
- 按
Ctrl+Shift+P输入Preferences: Key Bindings,左右并排打开 Default 和 User 文件 - 在左侧 Default 中搜
"ctrl+d",确认它原本应触发duplicate_line - 在右侧 User 和所有插件目录(
Packages/Vintage/、Packages/Emmet/等)中全局搜索相同"keys"字段 - 高危插件优先排查:
Vintage、Emmet、Origami、SideBarEnhancements
User.sublime-keymap 写错 JSON 就等于没写
这个文件是纯 JSON 数组,语法错一点整份配置就被静默忽略——右下角可能只闪一下红字错误提示,稍不注意就错过。
- 所有键名和字符串值必须用英文双引号包裹,例如
"keys"不是keys - 数组结尾不能多逗号:
["ctrl+alt+f"],是错的,["ctrl+alt+f"]才对 - 不支持
//或/* */注释,要禁用某条绑定,直接删整行,或改成无效命令:"command": "not_a_real_command" - 修改后按
Ctrl+S保存即生效,无需重启
Esc 键失效?别碰 Key Bindings
Esc 关闭搜索框、命令面板、替换栏,是 Sublime 内核硬编码行为,不走任何 .sublime-keymap 流程。你在 User.sublime-keymap 里加 {"keys": ["escape"], "command": "hide_panel"} 不仅无效,还会破坏原生逻辑。
-
Esc失效且subl --safe-mode下恢复 → 问题出在插件,常见于Vintage(需关exit_insert_mode_on_escape)或Origami(关close_on_escape) -
--safe-mode下仍无效 +sublime.log_input(True)无输出 → macOS 检查是否勾选「使用 F1、F2 等键作为标准功能键」,或键盘固件层吞键
真正难处理的不是哪条键被覆盖了,而是你根本不知道它被哪个插件的哪一行悄悄覆盖了——尤其当多个插件都绑了 Ctrl+K 这类高频组合时,得一层层翻 Default.sublime-keymap 才能揪出来。


















