sublime.log_input(True) 是第一道验证关:升级后热键失效时,先在控制台执行该命令,若按组合键无输出,说明系统、输入法或驱动截获了按键;再检查键绑定加载顺序、JSON语法错误及硬编码键(如Esc)的特殊性。

sublime.log_input(True) 是第一道验证关
升级后热键突然不响,别急着重装或删配置——90% 的情况是按键压根没进 Sublime。先打开控制台(Ctrl+`),输入 sublime.log_input(True) 回车,再按你失效的组合键(比如 Ctrl+/ 或 Cmd+D)。
如果控制台**完全没输出**,说明系统、输入法或显卡驱动在升级后启用了新热键,把你的组合键截掉了:
- Windows:检查 NVIDIA 控制面板或 Intel Graphics Command Center 里是否新增了
Ctrl+Alt+方向键类全局快捷键 - macOS:进「系统设置 → 键盘 → 快捷键」,重点看 Spotlight(
Cmd+Space)和输入源切换(Cmd+Shift+Space)是否与 Sublime 冲突 - 中文输入法(搜狗、百度、QQ 拼音):升级后常重置默认热键,
Ctrl+Shift和Cmd+Shift+L最容易被劫持
Key Bindings 加载顺序变了,User 配置可能被盖掉
Sublime 升级后插件机制或加载路径可能调整,导致你写的 User.sublime-keymap 被某个插件的 Default.sublime-keymap 覆盖——尤其 Vintage、Emmet、Origami 这类自带绑定的插件。
打开命令面板(Ctrl+Shift+P),输入 Preferences: Key Bindings,左右并排对比:
- 左侧(Default)搜
ctrl+/,确认原命令是toggle_comment - 右侧(User)搜同一条,若没出现,说明你写的没生效;若出现了但功能不对,说明右侧有其他插件在更晚位置又绑了一次
- 用
Preferences → Browse Packages进每个插件文件夹,翻它的Default.sublime-keymap,全局搜索你关心的 keys
JSON 格式在升级后更严格,一个逗号就废整段
新版 Sublime 对 JSON 解析更敏感,User.sublime-keymap 里任何语法错误都会让整个文件静默失效,右下角红字提示一闪而过,极易忽略。
必须检查这几处:
- 所有字符串(包括
"keys"、"command"、"ctrl+alt+f")都得用英文双引号,不能是中文引号或单引号 - 数组结尾不能多逗号:
["ctrl+d"],是错的,["ctrl+d"]才对 - 对象末尾也不能多逗号:
{"keys": ["esc"], "command": "hide_panel"},会失效 - JSON 不支持
//注释,想临时禁用某条,直接删整行,或改成"command": "not_a_real_command"
Esc、Tab、Backspace 这些键根本不能靠 keymap 改
升级后有人发现 Esc 关不了搜索框,就往 User.sublime-keymap 里硬加 {"keys": ["escape"], "command": "hide_panel"}——这不仅无效,还可能破坏 UI 状态。
原因很直接:Esc、Tab、Backspace 在 Sublime 内核里是硬编码行为,不走 key binding 流程。它们的响应逻辑写死在 C++ 层,Default 和 User 文件里根本搜不到对应绑定。
如果这些键异常,唯一靠谱的排查路径是:
- 先用
sublime.log_input(True)确认按键是否进入 Sublime(无输出 = 系统/键盘固件拦截) - macOS 外接键盘记得勾选「使用 F1、F2 等键作为标准功能键」
- Windows 上某些键盘驱动(如 Logitech Options)会劫持
Esc,需进驱动设置关闭
真正容易被忽略的是:升级后插件可能自动启用新功能(比如 Vintage 开启了 Vim 模式),导致原本有效的 Ctrl+D 被重映射为 vi_add_to_selection,而你根本没意识到自己进了 Normal 模式。


















