Sublime的Build System本质是JSON配置文件,用于定义调用外部命令(如python、g++)的执行逻辑;它通过Tools→New Build System创建,支持变量、多平台适配与错误跳转,但原生不支持保存即执行,需插件辅助。

Sublime 的 build system 本质是命令行封装,不是“批处理”
Sublime Text 没有 Windows 那种 .bat/.cmd 批处理意义上的“自带批处理任务”。它只有 build system——本质是一组 JSON 配置,用来在保存或按键(Ctrl+B)时调用外部命令。所谓“自动化执行”,必须靠这个机制触发,且依赖 shell 环境、路径、作用域三者对齐。
常见误解是把 Preferences.sublime-settings 里加 "save_on_focus_lost": true 当作“自动运行”,其实它只保存文件,不触发任何命令。真要自动执行,必须配插件(如 SublimeOnSaveBuilder)或改构建系统绑定到保存事件——但后者非官方支持,稳定性差。
-
build system文件后缀必须是.sublime-build,放在Packages/User/或项目根目录 - 配置中
"cmd"是数组,不能写成字符串(如["python", "$file"]✅,"python $file"❌) -
"selector"必须匹配当前文件的语法 scope(用Ctrl+Shift+P → Developer: Show Scope Name查看) - Windows 下若用
cmd特性(如&&、||),得设"shell": true并用["cmd", "/c", "command"]
如何让 Ctrl+B 真正跑起来:working_dir 和 selector 是两大断点
按 Ctrl+B 没反应或报错,90% 是 working_dir 或 selector 错了。尤其 Python 测试、JS 构建这类依赖项目结构的场景,错一个就静默失败。
-
"working_dir": "${file_path}"只适合单文件脚本;多层包结构(如src/+tests/)必须用"${project_path:${folder}}"并确保src/在PYTHONPATH中 -
selector写成"source.py"会失效,因为 Sublime 实际 scope 是source.python;Vue 单文件组件是text.html.vue,不是source.vue - JS/TS 测试需覆盖所有后缀:
"selector": "source.js, source.jsx, source.ts, source.tsx" - 调试时加
"quiet": false和"shell": true,否则错误输出被截断或环境变量不生效
保存即执行?别信原生功能,得靠 SublimeOnSaveBuilder
Sublime 原生不支持“保存即执行命令”。硬改 on_post_save 写 Python 插件或直接动 Preferences.sublime-settings,维护成本高、易被升级覆盖。唯一靠谱路径是插件 SublimeOnSaveBuilder(注意不是已停更的 OnSave)。
- 安装后,必须手动启用构建系统:右下角状态栏显示
Build System: Automatic或你选中的名称,显示None就不会触发 -
"cmd"必须是数组,哪怕只有一条命令;"shell": true才能用管道(如["sh", "-c", "cat $file | prettier --write"]) - Mac/Linux 用户常因 PATH 不一致失败——Sublime 的 shell 环境未必继承你的终端 PATH,建议用绝对路径调用命令(如
"/usr/local/bin/prettier") - 避免在回调里做阻塞操作(如同步 HTTP 请求),否则编辑器 UI 会卡死
自定义命令和快捷键:TextCommand 插件才是真正的自动化脚本
如果 build system 太重、插件太重,又想对当前文本做轻量处理(比如批量加引号、反转选区、格式化某段 JSON),就得写 TextCommand 插件。它不依赖外部命令,纯 Python,响应快,但必须严格遵守 Sublime 插件规范。
- 文件放
Packages/User/,类名以Command结尾(如JsonPrettyPrintCommand),命令名自动转为蛇形(json_pretty_print) - 所有文本修改必须通过
edit对象:用view.replace(edit, region, new_text),不能直接改字符串 - 多选区要倒序遍历(
reversed(self.view.sel())),否则前面替换导致后面Region坐标偏移失效 - 绑定快捷键需手动编辑
Preferences → Key Bindings,例如:{"keys": ["ctrl+alt+j"], "command": "json_pretty_print"}
真正复杂的自动化逻辑(比如跨文件提取变量、生成接口文档)容易踩到 Sublime API 的边界:无法异步、无完整进程控制、插件加载时机不可控。这时候该考虑把核心逻辑抽到 CLI 工具里,Sublime 只负责调用和展示结果。


















