先确认按键是否进入sublime:执行sublime.log_input(true)后无输出说明被系统/输入法/驱动截断;有输出则检查加载顺序default→插件default→user、json语法错误及command名是否拼错。

Sublime Text 里 Ctrl+B、Cmd+Shift+P 这类快捷键突然失灵,大概率不是配置写错了,而是系统或外围软件把按键截走了——Sublime 根本没收到。
怎么确认按键被系统/输入法/显卡驱动截断?
这是所有排查的第一步,跳过它直接改 User.sublime-keymap 就是白忙活。
按 Ctrl+` 打开控制台,输入:
sublime.log_input(True)
回车后,立刻按你怀疑失效的组合键(比如 Ctrl+B 或 Cmd+Shift+P)。如果控制台完全没输出,说明按键在进 Sublime 前就被吞了。
- Windows 用户重点检查:
NVIDIA 控制面板 → 热键、Intel Graphics Command Center → 快捷键是否启用了Ctrl+Alt+方向键类组合 - 搜狗、QQ 拼音等中文输入法默认占用
Ctrl+Space和Ctrl+Shift切换中英文——切到英文输入法再试一次 - macOS 用户去「系统设置 → 键盘 → 快捷键」,关掉
Spotlight的Cmd+Space和「输入源」里的同名切换键(哪怕你不用,它也可能干扰事件分发)
为什么 sublime.log_input(True) 有输出,但功能还是不对?
说明按键进了 Sublime,但绑定被覆盖或命令名拼错。这时候要补上第二条日志:
sublime.log_commands(True)
再按同一组合键,看控制台是否出现类似:
command: emmet_expand_abbreviation
如果有输入无命令,或命令名不是你预期的(比如 toggle_comment 变成 emmet_expand_abbreviation),就是插件抢了绑定。
-
Ctrl+Shift+P在 macOS 上被搜狗输入法劫持时,sublime.log_input(True)无输出;但若输出了key evt: cmd+shift+p却没弹出命令面板,说明是sublime.log_commands(True)显示的命令不对 - 常见“高危”插件:Vintage(接管
Esc、i)、Emmet(接管Tab、Ctrl+/)、Origami(接管Esc关面板) - 临时验证:终端执行
subl --safe-mode,如果快捷键恢复,就坐实是插件冲突
User.sublime-keymap 写错 JSON 就等于没写
这个文件是纯 JSON 数组,语法错一点整份配置就会被 Sublime 静默忽略——右下角可能只闪一下红字错误提示,稍不注意就错过。
- 必须用英文双引号:
"keys"不是keys,"toggle_comment"不是toggle_comments(多一个s就失效) - 数组末尾不能多逗号:
["ctrl+alt+f"],是错的,["ctrl+alt+f"]才对 - 不支持
//或/* */注释;想临时禁用某条绑定,要么删整行,要么改成"command": "not_a_real_command" - 改完必须按
Ctrl+S保存,Sublime 会立即重载——但若某个插件的Default.sublime-keymap也在更靠后位置绑了相同keys,你的自定义仍会被盖掉
Esc、Tab 这类键根本不在 Key Bindings 管辖范围内
关闭搜索框、命令面板、替换栏这些行为是 Sublime 内核硬编码的,不走任何 .sublime-keymap 流程。
你在 User.sublime-keymap 里加:
{"keys": ["escape"], "command": "hide_panel"}
不仅无效,还会破坏原生逻辑——比如按 Esc 后搜索框不关闭,面板也不隐藏,UI 就卡在那里。
-
Esc失效且sublime.log_input(True)无输出,macOS 用户要检查「系统设置 → 键盘 → 功能键」是否勾选「使用 F1、F2 等键作为标准功能键」 -
Tab被 Emmet 接管?别乱改 Key Bindings,得去Preferences → Key Bindings编辑右侧的User文件,用context规则限定作用范围,否则粘贴到 Emmet 自己的 Key Bindings 设置里是无效的 - 某些键(如
F1~F12)还可能被键盘固件或 BIOS 层级拦截,连系统都收不到,更别说 Sublime











