Ctrl+B没反应需先用sublime.log_input(True)确认按键是否被系统或输入法截断;若进入则检查构建系统绑定、语法标识、插件覆盖及User配置JSON语法错误。

Ctrl+B没反应?先确认按键是否进到Sublime里
构建系统热键(比如Ctrl+B)失灵,90%不是构建系统坏了,而是按键根本没传进来。最直接验证方式:按Ctrl+`打开控制台,输入sublime.log_input(True)回车,再按Ctrl+B。如果控制台**完全没输出**,说明系统或外围软件截断了这个组合键:
- Windows 用户重点检查 NVIDIA 控制面板或 Intel Graphics Command Center 里的热键(尤其是
Ctrl+Alt+方向键类) - 搜狗、QQ 拼音等输入法默认占用
Ctrl+Shift+B或Ctrl+B切换软键盘——切到英文输入法再试一次 - macOS 用户去「系统设置 → 键盘 → 快捷键」,关掉「Spotlight」的
Cmd+Space和「输入源」里的同名切换键(哪怕你没用Cmd+Space,它也可能干扰底层事件分发)
按键进了Sublime,但没触发构建?查加载顺序和覆盖规则
如果控制台输出类似 key evt: ctrl+b,说明按键已送达,问题出在绑定层。Sublime 加载快捷键的顺序是:Default(内置)→ 插件自带的 Default.sublime-keymap → User(你写的)。后加载者会覆盖前加载者:
- 按
Ctrl+Shift+P输入Preferences: Key Bindings,左右并排打开两个文件 - 在左侧(Default)搜
ctrl+b,确认原命令是build - 在右侧(User)和所有插件目录(
Preferences → Browse Packages)里全局搜索"ctrl+b",看谁最后定义了它 - 临时禁用插件最省事:用
Package Control: Disable Package逐个关掉 Build Tools、Terminus、ShellCommand 这类可能重绑Ctrl+B的插件
User.sublime-keymap 语法错一点就静默失效
你在 Key Bindings – User 里写的任何规则,只要 JSON 错一点,整段都会被 Sublime 忽略,且不报错:
- 必须用英文双引号,不能用中文引号或单引号:
{"keys": ["ctrl+b"], "command": "build"} - 数组末尾不能多逗号,对象末尾也不能多逗号(
"command": "build",最后这个逗号就是雷) - JSON 不支持注释;想禁用某条绑定,要么删整行,要么改成无效命令:
"command": "not_a_real_command" - 改完一定要按
Ctrl+S保存,Sublime 会立即重载——但若某个插件的Default.sublime-keymap里也有同keys且加载更晚,你的自定义仍会被盖掉
多个构建系统共存时,如何让 Ctrl+B 触发指定系统?
默认 Ctrl+B 只调用当前文件关联的构建系统(由右下角语法标识决定),不会弹菜单选。想手动切换目标,得靠 context 区分场景:
- 查当前语法作用域:按
Ctrl+Shift+P输入Show Scope Name,看到类似source.python或text.html.vue - 在
Key Bindings – User中加带条件的绑定,例如让Ctrl+B在 Vue 文件里调用npm run build构建系统:[{"keys": ["ctrl+b"], "command": "build", "args": {"variant": "npm run build"}, "context": [{"key": "selector", "operand": "text.html.vue"}]}] - 注意
variant名必须和你构建系统 JSON 文件里"variants"下定义的 name 完全一致(区分大小写,空格敏感)
真正容易被忽略的是:构建系统本身不参与快捷键优先级竞争,但它的触发依赖于 build 命令能否正确执行——而这个命令是否被别的 keymap 劫持,得一层层往回追。


















