ctrl+b失效首要验证按键是否进入编辑器:执行sublime.log_input(true)后无key evt输出,说明被系统/输入法截断;有输出则排查插件覆盖、json语法错误或构建系统context配置。

Sublime Text 的 Ctrl+B(或 Cmd+B)运行脚本失效,90% 不是构建系统坏了,而是按键根本没进编辑器,或被后加载的插件绑定静默覆盖——改配置前必须先验证信号通路。
如何确认 Ctrl+B 是否真正进入 Sublime?
这是所有排查的起点。跳过它直接改 User.sublime-keymap 或重装插件,纯属白忙活。
- 按
Ctrl+`打开控制台,输入sublime.log_input(True)并回车 - 再按
Ctrl+B(Windows/Linux)或Cmd+B(macOS) - 若控制台**完全无输出**(如
key evt: ctrl+b),说明按键被系统/驱动/输入法截断:- Windows:检查 NVIDIA 控制面板、Intel Graphics Command Center 的热键设置;搜狗/QQ 拼音默认占用
Ctrl+B切软键盘 - macOS:系统设置 → 键盘 → 快捷键 → 「应用快捷键」中搜索
Cmd+B,常被 Finder 或 Dock 占用
- Windows:检查 NVIDIA 控制面板、Intel Graphics Command Center 的热键设置;搜狗/QQ 拼音默认占用
- 若有
key evt输出但没执行构建,说明按键进了,问题在绑定层
Ctrl+B 进了编辑器却没触发构建,怎么定位覆盖者?
Sublime 加载快捷键顺序固定:Default → 插件自带的 Default.sublime-keymap → User.sublime-keymap。后加载者静默覆盖前一个,且不报错。
- 按
Ctrl+Shift+P输入Preferences: Key Bindings,左右并排打开两个文件 - 在左侧(Default)搜
"ctrl+b",确认原命令是"build" - 在右侧(User)和所有插件目录(
Preferences → Browse Packages)中全局搜索"ctrl+b" - 重点关注
Vintage、Terminus、ShellCommand、Build Tools这些插件的Default.sublime-keymap文件——它们加载在 User 之前,你删了 User 条目也无效 - 临时验证:运行
subl --safe-mode,若Ctrl+B恢复,就坐实是插件冲突
User.sublime-keymap 写错 JSON 就等于没写
这个文件是纯 JSON 数组,语法错一点整份配置就静默失效,右下角红字提示一闪而过,极易忽略。
- 必须用英文双引号:
"keys"不是keys,"command"不是command - 数组结尾不能多逗号:
["ctrl+b"],是错的,["ctrl+b"]才对 - 不支持
//或/* */注释;禁用某条绑定,要么删整行,要么改成"command": "not_a_real_command" - 保存后立即生效(
Ctrl+S),但若某个插件的Default.sublime-keymap里也有同keys且加载更晚,你的自定义仍被盖掉
多个构建系统共存时,Ctrl+B 总是调用错的系统?
默认行为由当前文件的语法标识(右下角显示)决定,不是弹菜单选。想让 Ctrl+B 固定触发某构建系统,得靠 context 区分场景,而非简单重绑命令。
- 例如只在 Python 文件中触发
python -u "$file"构建,需在User.sublime-keymap中加"context"字段: [{"keys": ["ctrl+b"], "command": "build", "args": {"select": false}, "context": [{"key": "selector", "operator": "equal", "operand": "source.python"}]}]- 注意:
"select": false防止弹出构建系统选择菜单;context必须精确匹配语法作用域,可用Ctrl+Shift+P→Developer: Show Scope Name查看当前光标处作用域 - 别把修复代码粘贴到插件自己的 Key Bindings 设置页(如
Preferences → Package Settings → Emmet → Key Bindings – User),那个文件 Sublime 根本不加载
真正难缠的是那些不走 keymap 流程的键——比如 Esc 关面板、Tab 缩进,它们是内核硬编码行为;还有 macOS 下 Cmd+B 被系统级「应用快捷键」劫持,这种冲突不会出现在任何 .sublime-keymap 文件里,必须去系统设置里关。











