必须通过user.sublime-keymap用json绑定build命令并显式传args.variant指定构建系统名称,名称须与.sublime-build中name字段完全一致;可加context限定语言,避免覆盖默认f7/f8键。

如何在 User.sublime-keymap 中绑定 build 命令
构建系统(Build System)的快捷键必须通过 User.sublime-keymap 添加,不能靠菜单或插件界面配置。Sublime 不提供“为某构建系统单独设快捷键”的图形选项,所有绑定都走同一套 JSON 规则。
关键点在于:build 命令本身不区分具体构建系统,它只接收 args 参数来指定 variant 或 select;你要绑定的其实是 build 这个 command,再用 args 指向目标。
-
"command": "build"是唯一可用的原生命令名,写build_with_make或run_python都会静默失效 - 必须显式传
"args": {"variant": "My Custom Build"},否则默认触发当前选中的构建系统 - 构建系统名称要和
.sublime-build文件里"name"字段完全一致(含空格、大小写) - 示例:为名为
ESLint Fix的构建系统设快捷键ctrl+alt+f
[{"keys": ["ctrl+alt+f"], "command": "build", "args": {"variant": "ESLint Fix"}}]
为什么按了快捷键却没反应或弹错构建系统
常见现象是右下角无报错、但构建面板没打开,或打开了别的构建系统——这基本不是快捷键没生效,而是 args 传错了或上下文冲突了。
- 构建系统名称拼错(比如写成
"eslint_fix"而实际是"ESLint Fix"),build命令会降级为执行默认构建,甚至静默跳过 - 没加
args字段,{"keys": ["f5"], "command": "build"}看似合理,实则只是重复触发当前选中项,无法定向 - 多个构建系统同名(例如两个
.sublime-build都叫Python),Sublime 会随机选一个,行为不可预测 - 当前文件没关联语法(
Plain Text),某些构建系统会因selector不匹配而被跳过,但快捷键仍算“执行成功”
如何让构建快捷键只在特定语言中生效
直接绑 build 会全局生效,想限定 Python 文件才触发 ESLint Fix,就得靠 context 过滤,而不是靠构建系统自身逻辑。
-
"context": [{"key": "selector", "operator": "equal", "operand": "source.python"}]是最稳的判断方式,比检查文件扩展名可靠 - 如果构建系统本身依赖
file_regex或working_dir,请确保这些字段已在.sublime-build里正确定义,快捷键不参与这部分逻辑 - 想同时支持多种语言?不能写
"operand": "source.python | source.js"—— context 不支持正则或管道,得拆成两条规则 - 示例:仅在 JS/TS 文件中触发 Prettier 构建
[{"keys": ["ctrl+alt+p"], "command": "build", "args": {"variant": "Prettier"}, "context": [{"key": "selector", "operator": "equal", "operand": "source.js"}]}, {"keys": ["ctrl+alt+p"], "command": "build", "args": {"variant": "Prettier"}, "context": [{"key": "selector", "operator": "equal", "operand": "source.ts"}]}]
覆盖 F7/F8 等默认构建快捷键的风险
Sublime 默认用 f7 触发 build,f9 触发 build_next。直接覆盖它们看似省事,但容易引发连锁问题。
- 写
{"keys": ["f7"], "command": "build", "args": {"variant": "My Build"}}后,你将彻底失去“自动选构建系统”的能力,包括命令面板里的Build With…列表也会被绕过 - 如果构建失败,Sublime 原生的错误高亮和跳转(靠
file_regex解析)依然工作,但快捷键本身不会反馈任何提示 - 更隐蔽的问题:某些插件(如 Terminus、SublimeLinter)会监听
build命令事件,你的定向绑定可能干扰其状态判断 - 建议优先用非冲突组合键,比如
ctrl+shift+b或alt+shift+f,避开 F 键区与系统/输入法的潜在抢占
真正难的不是写那几行 JSON,而是确认构建系统本身是否已正确加载、名称是否精确匹配、以及 context 是否在你预期的编辑状态下为 true —— 这些没法靠语法检查发现,只能手动验证。











