快捷键全失效需先验证按键是否进入sublime:用sublime.log_input(true)检测,若控制台无输出说明被系统或输入法拦截;再按加载顺序default→插件default→user排查覆盖;严格遵循json语法,禁用esc绑定需通过插件设置而非key bindings。

快捷键全失效?先确认按键有没有进 Sublime
不是配置丢了,而是按键压根没送达。Sublime 更新后常伴随系统级热键拦截被重新启用,尤其 Windows 上 NVIDIA / Intel 显卡控制面板会悄悄恢复 Ctrl+Alt+方向键 类全局热键,直接吞掉整个 Ctrl 组合——Ctrl+C、Ctrl+S 全部静默消失。
验证方法极简:Ctrl+` 打开控制台 → 输入 sublime.log_input(True) 回车 → 按 Ctrl+C。如果控制台**完全没输出**,说明问题不在 Sublime 内部,而在外面。
- Windows:进 NVIDIA 控制面板 → “桌面” → “热键” 或 Intel Graphics Command Center → “快捷键”,关掉所有含
Ctrl+Alt的项 - macOS:系统设置 → 键盘 → 快捷键 → 关掉 Spotlight 的
Cmd+Space和“输入源”里的切换快捷键 - 所有平台:临时切英文输入法,搜狗、QQ 拼音默认劫持
Ctrl+Shift和Ctrl+Space
User.sublime-keymap 保存后仍不生效?加载顺序才是关键
Sublime 加载快捷键的顺序是:Default → 插件自带的 Default.sublime-keymap → User.sublime-keymap。更新后某些插件(如 Vintage、Emmet)可能升级了绑定文件,它们的 Default.sublime-keymap 会覆盖你写的 User 配置,且不报错、不提示。
查法直接:Ctrl+Shift+P → 输入 Preferences: Key Bindings,左右并排打开两个文件:
- 在左侧(Default)搜
"ctrl+d",确认它本应触发find_under_expand - 在右侧(User)搜同一条
"keys": ["ctrl+d"],若没找到,再用Preferences → Browse Packages进每个插件目录,翻Default.sublime-keymap - 常见高危插件:Vintage(改
Ctrl+/)、Origami(劫持Esc)、GitGutter(覆盖Ctrl+Shift+P)
JSON 格式错一个字符,整份配置就静默报废
更新后很多人重写 User.sublime-keymap,但 Sublime 对 JSON 格式极其苛刻:多一个逗号、少一个引号、用了中文标点,都会让整个文件失效,右下角只闪一下红字错误提示,稍不留神就错过。
必须遵守的硬规则:
- 所有键名和字符串值必须用**英文双引号**:
"keys"不是keys,"toggle_comment"不是'toggle_comment' - 数组结尾不能有逗号:
["ctrl+alt+f"],是错的,["ctrl+alt+f"]才对 - JSON 不支持
//注释,想禁用某条绑定,要么删整行,要么改成无效命令:"command": "not_a_real_command" - 保存后立即生效,不用重启,但前提是没被插件的
Default.sublime-keymap覆盖
Esc 键失效?别往 Key Bindings 里加 escape 绑定
Esc 关搜索框、关命令面板、关替换栏,是 Sublime 内核硬编码行为,不走任何 .sublime-keymap 流程。你在 User.sublime-keymap 里加 {"keys": ["escape"], "command": "hide_panel"} 不仅无效,还会破坏原生逻辑——面板卡住、UI 僵死。
真正该做的:
- 先运行
subl --safe-mode:如果 Esc 恢复,说明是插件劫持(Vintage 默认把 Esc 当退出插入模式;Origami 默认设close_on_escape) - Vintage 用户:进
Preferences → Package Settings → Vintage → Settings,设"exit_insert_mode_on_escape": false - Origami 用户:关掉其
close_on_escape选项 - 如果
--safe-mode下 Esc 仍无效,且sublime.log_input(True)无输出,问题在 macOS 系统未勾选「使用 F1、F2 等键作为标准功能键」,或键盘固件层异常
最麻烦的不是配置写错,而是你改了 User 文件,却忘了插件的 Default 文件还在后台默默执行——它比你更晚加载,也更有优先权。











