唯一可靠方法是启用sublime.log_input(true)和sublime.log_commands(true)通过控制台日志判断按键是否被系统截断、绑定是否被覆盖或command名拼错,而非依赖keymaps插件;两者都无输出说明问题不在sublime,只有前者有输出则按键进入但未触发命令。

唯一可靠的方法是打开控制台,执行 sublime.log_input(True) 和 sublime.log_commands(True),看日志里有没有输出、输出什么——其他所有“查绑定列表”“比对文件”的方式都会漏掉关键冲突点。
按键根本没进 Sublime?先看 sublime.log_input(True)
这是排查的第一步,跳过它等于在黑盒里调参。按 Ctrl+` 打开控制台,输入:
sublime.log_input(True)
再按你怀疑失效的快捷键(比如 Ctrl+/)。观察控制台:
- 完全没输出 → 按键被系统/输入法/显卡驱动截断:Windows 用户重点查 NVIDIA 控制面板或 Intel Graphics Command Center 里的热键;中文输入法(搜狗、QQ 拼音)默认占
Ctrl+Shift+B或Ctrl+B,切英文再试 - 有
key evt: ctrl+/输出 → 按键已送达 Sublime,问题出在命令层或绑定层
按键进了但功能没触发?接着看 sublime.log_commands(True)
保持控制台开着,继续输入:
sublime.log_commands(True)
再按同一组合键。这时有三种典型情况:
- 有
key evt,但无command:行 → 绑定被覆盖、command名拼错(比如toggle_comment写成toggle_comments),或context条件不满足(如只在 JS 文件中生效,你却在 Markdown 里按) - 有
command: show_panel {"panel": "console"}这类输出,但不是你预期的命令 → 真正生效的是另一条绑定,比如 Emmet 把Ctrl+Shift+P覆盖成了emmet_expand_abbreviation - 两者都有,且
command名正确 → 再检查该命令是否真能执行(比如build命令依赖当前语法类型或构建系统配置)
为什么改了 User.sublime-keymap 还是没用?
因为 Sublime 加载顺序是:Default → 插件的 Default.sublime-keymap → User.sublime-keymap。后加载者静默覆盖前加载者,且不报错。
- 插件(如 Vintage、Emmet、Origami)常在自己的
Default.sublime-keymap里偷偷绑定相同组合,路径类似Packages/Emmet/Default (Windows).sublime-keymap -
User.sublime-keymap是纯 JSON 数组,一个多余逗号、中文引号、漏方括号,整份配置就静默失效——右下角红字一闪而过,极易忽略 - 临时验证:运行
subl --safe-mode,如果快捷键恢复,基本坐实是插件冲突;再用Package Control: Disable Package逐个关,不用猜
别信“Keymaps 插件”列出的全部绑定
这类插件只能扫描静态文件,漏掉三类关键绑定:
- 动态注册的命令(比如某些插件在启动时 runtime 注册)
-
context不匹配的条件绑定(比如"key": "setting.is_widget",只在命令面板里生效) - 系统级劫持(如 macOS 的 Spotlight 或 Windows 的显卡工具热键)
真正能穿透所有层级的,只有 Sublime 自带的 log_input 和 log_commands。它们输出的就是 Sublime 内核实际收到和执行的东西,没有中间商,也没有幻觉。











