先确认按键是否进入Sublime:执行sublime.log_input(True)后无输出,说明被macOS系统、输入法或硬件拦截;有输出则检查Key Bindings加载顺序、插件冲突或JSON语法错误。

Mac 上 Sublime 的 Cmd+Space、Cmd+Shift+P、Esc 等键“失灵”,90% 不是 Sublime 坏了,而是 macOS 在系统层就把按键截走了——Sublime 根本没收到。
怎么确认按键根本没进 Sublime?
这是所有排查的第一步,跳过它改配置全是白忙活。
- 按
Ctrl+`打开控制台,输入sublime.log_input(True)回车 - 再按你怀疑失效的组合(比如
Cmd+Shift+P、Esc、Ctrl+C) - 如果控制台**完全没输出**,说明信号被 macOS 系统、输入法、键盘固件或第三方工具(如 Karabiner、Intel Graphics 工具)中途吞掉
- macOS 用户重点检查:系统设置 → 键盘 → 快捷键 → 聚焦(Spotlight 是否占了
Cmd+Space)、输入源(是否用Cmd+Space或Ctrl+Space切输入法) - 若用外接键盘,还要确认是否勾选了「使用 F1、F2 等键作为标准功能键」——没勾选时,
Esc常被固件拦截
Cmd+Shift+P 和 Cmd+Space 冲突怎么办?别禁 Spotlight,换绑定
Spotlight 默认用 Cmd+Space,而 Cmd+Shift+P 在部分 macOS 版本中也会被 Spotlight 或输入法劫持。禁用 Spotlight 不现实,也不推荐。
- 打开 系统设置 → 键盘 → 快捷键 → 聚焦,把 Spotlight 改成
Cmd+Alt+Space - 同页面下拉到 输入源,禁用或重设「选择上一个输入法」的快捷键(尤其避开
Cmd+Space和Ctrl+Space) - 然后在 Sublime 的
Preferences → Key Bindings右侧(Key Bindings – User)里加一条不冲突的绑定:
[{"keys": ["ctrl+shift+p"], "command": "show_overlay", "args": {"overlay": "command_palette"}}]- 保存后立即生效;不用删原
Cmd+Shift+P绑定,避免影响 Package Control 等插件依赖 - 验证方式:切中文输入法,按新组合,看命令面板是否弹出
Esc 关不了搜索框?它压根不走 Key Bindings
Esc 关闭搜索框、命令面板、替换栏等行为是 Sublime 内核硬编码逻辑,Default.sublime-keymap 和 User.sublime-keymap 里搜不到任何 escape 绑定——你加了也无效,还可能破坏原生功能。
- 先运行
sublime.log_input(True)按Esc:无输出 → 问题在系统/键盘固件(如未勾选「使用 F1、F2 等键作为标准功能键」) - 有
key evt: escape输出但 UI 不响应 → 再运行sublime.log_commands(True),按Esc看是否触发hide_panel或hide_overlay - 没命令输出 → 插件劫持(常见于
Vintage、Origami、Emacs Pro Essentials) - 有命令但无效 → 插件 UI 层覆盖了默认行为,需进对应插件设置关选项:
Vintage关"exit_insert_mode_on_escape": false,Origami关close_on_escape
自定义 Key Bindings – User 静默失效?JSON 格式错一个字符就全挂
这个文件是最终生效层,也是最脆弱的一环:一个中文逗号、引号漏写、数组末尾多加个逗号、用了 // 注释,整个文件都会被 Sublime 忽略,且不报错。
- 必须用英文双引号,不能用中文引号或单引号
- 数组末尾不能有多余逗号,例如
[{"keys": ["cmd+k"]},]是非法的 - 不支持任何注释(
//或/* */),加了就失效 - 想禁用某个快捷键(比如不让
Cmd+K Cmd+U转小写),不要删整行,而是指向一个无效命令:
[{"keys": ["cmd+k", "cmd+u"], "command": "not_a_real_command"}]- 改完保存后,Sublime 自动重载;若快捷键仍不对,临时清空
User文件内容(只留[]),测试是否恢复——能恢复,说明问题就在你的自定义配置里
真正麻烦的从来不是改哪一行,而是你根本不知道按键有没有进编辑器、也不知道哪个插件在后台悄悄覆盖了命令。日志开关、安全模式、系统快捷键设置,这三步缺一不可;尤其 Esc 这种内核级行为,强行往 Key Bindings 里塞规则只会让问题更难定位。


















