按键未进sublime时,先用sublime.log_input(true)确认是否被系统或输入法截断;若进入则检查键绑定覆盖、json语法错误及插件冲突;esc等内核键不可自定义,失效需排查插件或系统设置。

按键根本没进 Sublime,别急着改配置
按 Ctrl+` 打开控制台,输入 sublime.log_input(True) 回车,再按你失效的组合键(比如 Ctrl+/)。如果控制台**完全没输出**,说明按键在进 Sublime 前就被截断了——你的配置再对也没用。
Windows 用户重点检查:
- NVIDIA 控制面板 → 「热键」设置里是否启用了 Ctrl+Alt+方向键
- Intel Graphics Command Center → 「快捷键」是否占用了 Ctrl+Shift 类组合
- 搜狗、QQ 拼音等输入法默认绑了 Ctrl+Space 或 Ctrl+Shift 切换中英文,切到英文输入法再试
macOS 用户检查:
- 系统设置 → 键盘 → 快捷键 → 「Spotlight」里是否启用了 Cmd+Space
- 同一页面下「输入源」里是否启用了 Cmd+Space 或 Ctrl+Space
控制台有 key evt 输出,但功能没触发
说明按键进了 Sublime,但绑定被覆盖或条件不满足。Sublime 的加载顺序是:Default → 插件的 Default.sublime-keymap → User。后加载的会静默覆盖前一个,且不报错。
排查步骤:
- 按 Ctrl+Shift+P 输入 Preferences: Key Bindings,左右并排打开文件
- 在左侧(Default)搜你想用的组合,比如 "ctrl+/",确认它原本对应 toggle_comment
- 在右侧(User)和所有插件目录(Packages/插件名/Default.sublime-keymap)里全局搜索同一 "keys" 字段
- 常见高危插件:Vintage、Emmet、Origami、GitGutter,它们自带的绑定常覆盖默认行为
临时验证方法:
- 运行 subl --safe-mode(命令行),如果快捷键恢复,就是插件问题
- 用 Package Control: Disable Package 逐个禁用可疑插件
User.sublime-keymap 写错 JSON 就等于没写
User.sublime-keymap 是纯 JSON 数组,语法错一点就整份失效,且只在右下角闪一下红字提示,极易忽略。
必须遵守:
- 所有键名和字符串值用英文双引号,"keys" 不是 keys
- 数组结尾不能多逗号:["ctrl+alt+f"], 是错的,["ctrl+alt+f"] 才对
- 不支持 // 注释,想禁用某条绑定,要么删整行,要么改成无效命令:"command": "not_a_real_command"
- 保存(Ctrl+S)后立即生效,不用重启
常见低级错误:
- 把 toggle_comment 写成 toggle_comments(多加 s)
- 用中文引号或单引号包裹字符串
- keys 字段漏掉方括号或写成对象形式
Esc、Tab 等键不能靠 Key Bindings 修改
escape 关闭搜索框、命令面板、替换栏,是 Sublime 内核硬编码行为,不走任何 .sublime-keymap 流程。你在 User.sublime-keymap 里加:
{"keys": ["escape"], "command": "hide_panel"}
不仅无效,还会破坏原生逻辑——比如按 Esc 后面板卡住不隐藏。
如果 Esc 失效:
- 先运行 subl --safe-mode,恢复则说明是插件劫持(Vintage、Origami 最常见)
- Vintage 插件需进 Preferences → Package Settings → Vintage → Settings,设 "exit_insert_mode_on_escape": false
- Origami 插件关掉其 close_on_escape 选项
- 若安全模式下仍无效,且 sublime.log_input(True) 无输出,问题在 macOS 未勾选「使用 F1、F2 等键作为标准功能键」或键盘固件层











