必须用build_with命令并显式传args.name,因build命令默认禁用快捷键响应;Ctrl+B无上下文时会fallback到首个构建系统(如Python),name须与.sublime-build中name字段逐字一致。

不能直接用 build 命令绑定快捷键,必须用 build_with 并显式传 args.name,否则 Ctrl+B 会 fallback 到第一个构建系统,不是你想要的那个。
为什么 build 命令绑快捷键完全不生效
Sublime 默认禁用了 build 命令的快捷键响应——哪怕你在 User.sublime-keymap 里写 {"keys": ["ctrl+b"], "command": "build"},控制台也不会报错,但按键就是没反应。这是设计行为,不是 bug。真正能触发特定构建系统的,只有 build_with 命令,且必须带 args.name 字段。
-
name必须和.sublime-build文件里"name"字段值**逐字一致**:大小写、空格、括号都不能少,比如"Rust (cargo build)"不能简写成"Rust" - 如果构建系统是项目级(定义在
.sublime-project中),name仍以 project 文件里写的为准,不是文件名 - 不加
args或args里缺name→ 快捷键静默失效,无提示
怎么正确写 build_with 的快捷键规则
打开 Preferences → Key Bindings,编辑右侧 User.sublime-keymap,确保整个内容是合法 JSON 数组格式(最外层用 [ ] 包裹)。
- 推荐用
Ctrl+Alt+B或Ctrl+Shift+B,避开Ctrl+B原生逻辑,也避免 Windows 输入法劫持Ctrl+Alt - 示例:为
Rust (cargo build)绑定Ctrl+Alt+B
[{
"keys": ["ctrl+alt+b"],
"command": "build_with",
"args": {"name": "Rust (cargo build)"}
}]
- 若真要复用
Ctrl+B,必须加context限定语言场景,否则它仍可能跑错构建系统 -
context中的selector值可按Ctrl+Shift+P→Show Scope Name实时查看,比如source.rust
为什么 Ctrl+B 总跑默认 Python 构建
因为没设 context 时,build(或未限定的 build_with)会 fallback 到 Default (Windows).sublime-keymap 里第一个可用构建系统,而 Python 构建通常排在前面。这不是你配置错了,是 Sublime 的 fallback 行为。
- 多个构建系统同名(如都叫
Python),build_with会按文件路径顺序匹配第一个,不保证是你当前项目里的那个 -
file_extensions或selector没配对的构建系统,可能被跳过,导致 fallback 发生 - 想让
Ctrl+B在 .rs 文件里只跑 Rust 构建,就得写两条规则:一条带context限定source.rust,另一条设"command": "unbound"拦住其他情况(否则 fallback 仍会发生)
容易被忽略的细节
很多人卡在 JSON 格式或命令名上,而不是逻辑本身:
- 右下角弹红字?90% 是 JSON 解析失败:检查逗号是否多写、引号是否全角、数组末尾是否多了逗号
-
keys里写"Ctrl+D"(大写 C)就无效,必须小写"ctrl+d" - 别手动去
Packages/User/下创建文件——文件名必须严格为User.sublime-keymap,大小写敏感 -
build_with不支持args.variant这类旧参数,只认name;variant 要靠构建系统内部定义

















