快捷键没反应需分两层排查:先用sublime.log_input(true)确认按键是否进入sublime,无输出说明被系统/输入法/驱动截断;有输出则按default→插件→user加载顺序检查绑定覆盖、json语法错误及插件冲突。

快捷键没反应,90% 不是 Sublime 坏了,而是按键根本没进编辑器,或被后加载的插件绑定静默覆盖——必须分两层查:先看键进没进来,再看命令绑没绑上。
怎么确认按键是否真的进了 Sublime?
这是所有排查的第一步,跳过它直接改配置=白忙活。按 Ctrl+` 打开控制台,输入 sublime.log_input(True) 回车,再按你怀疑失效的组合键(比如 Ctrl+/ 或 Cmd+Shift+P):
- 控制台完全没输出 → 键在进 Sublime 前就被截断了:Windows 用户重点查 NVIDIA/Intel 显卡控制面板、搜狗/QQ 拼音的热键;macOS 用户去「系统设置 → 键盘 → 快捷键」关掉 Spotlight 的
Cmd+Space和「输入源」里的切换快捷键 - 有输出类似
key evt: ctrl+shift+p→ 键已送达,问题出在绑定层,继续往下查
怎么知道哪个绑定在“抢”你的快捷键?
Sublime 的加载顺序是:内置 Default.sublime-keymap → 插件自带的 Default.sublime-keymap → 用户 Preferences.sublime-keymap。后加载者无提示覆盖前加载者。
- 按
Ctrl+Shift+P输入Preferences: Key Bindings,左右并排打开两个文件 - 在左侧(Default)搜你想用的组合,比如
"ctrl+/",确认它本该调用toggle_comment - 在右侧(User)和插件目录(
Packages/插件名/Default.sublime-keymap)里全局搜索同一"keys"字段 —— Vintage、Emmet、Origami 这些插件常在这里偷偷绑定 - 插件的
Default.sublime-keymap加载在系统之后、User 之前,所以即使你删了 User 里的条目,插件那条仍生效
为什么改了 User 文件还是无效?
User.sublime-keymap 是纯 JSON 数组,语法错一点整份就静默失效,右下角红字一闪而过,极易忽略。
- 必须用英文双引号:
"keys"不是keys,"command"不是command - 数组结尾不能多逗号:
["ctrl+alt+f"],是错的,["ctrl+alt+f"]才对 - 不支持
//或/* */注释;禁用某条绑定,要么删整行,要么改成"command": "not_a_real_command" - 常见低级错误:
toggle_comment写成toggle_comments、用中文引号、keys字段漏方括号
怎么验证是不是插件在搞鬼?
最省事的办法是启动安全模式:subl --safe-mode(终端执行)或菜单 Help → Troubleshoot → Restart in Safe Mode。
- 如果快捷键恢复了,坐实是插件冲突
- 再用
Package Control: Disable Package逐个关,不用猜——Vintage、Emmet、GitGutter 是高频嫌疑对象 - 临时切到无插件干扰环境:按
Ctrl+Shift+P输入Set Syntax: Plain Text,再测试快捷键 - 注意
Esc、Tab这类键是内核硬编码行为,User.sublime-keymap里加绑定不仅无效,还可能破坏原生逻辑
真正容易被忽略的是 context 条件和跨平台键名语义——同一组 keys 在不同上下文(比如 "key": "setting.is_widget")可能绑定不同行为,表面没冲突,实则“条件性失效”;macOS 的 super 对应 Windows/Linux 的 ctrl,但写死 ctrl+shift+f 会导致 macOS 用户永远按不出来。











