sublime text 构建系统需存于 packages/user 目录,通过 selector 控制文件类型匹配,用 shell_cmd/cmd 显式指定解释器路径,并借助 variants 实现单文件多操作模式。

Sublime Text 本身不支持“一键切换多个构建系统”的界面,但通过规范命名、正确存放位置和合理配置 selector,就能实现按文件类型自动推荐、按项目快速手动切换的效果。关键不是堆功能,而是让每个 .sublime-build 文件各司其职。
Build System 文件必须放在 Packages/User/ 目录下
Sublime 只扫描这个固定路径加载构建系统。其他位置(比如项目根目录、桌面、甚至 Packages/ 下其他子目录)的 .sublime-build 文件一律无效。
- Windows 路径通常是:
%APPDATA%Sublime TextPackagesUser - macOS 路径是:
~/Library/Application Support/Sublime Text/Packages/User/ - Linux 路径是:
~/.config/sublime-text/Packages/User/ - 最稳妥的方式:菜单 → Preferences → Browse Packages…,直接打开
User文件夹再保存 - 常见错误现象:
Tools → Build System菜单里看不到新创建的选项——八成是文件没放对地方,或扩展名被系统隐藏(如存成了Python3.sublime-build.txt)
用 selector 控制构建系统在什么文件里出现
selector 不是可有可无的字段,它决定了 Sublime 在打开某个文件时,是否把该构建系统列为默认候选项。乱设会导致菜单杂乱、误点执行失败。
- 查当前文件的 selector:打开目标文件 →
Ctrl+Shift+P→ 输入 Syntax: Show Syntax,看到类似source.python或source.ts的值 - 单语言匹配写法:
"selector": "source.python" - 多语言共用写法:
"selector": "source.python, source.js"(注意英文逗号+空格) - 删掉
selector字段?它会出现在所有源码类文件菜单里,看似“万能”,实则干扰大,尤其当你有十几个构建系统时 - 真实场景:你同时维护 Python 脚本和 TypeScript 服务端逻辑,分别配两个文件,各自写明
source.python和source.ts,打开.py时菜单顶部就只推 Python 构建系统
用 shell_cmd 或 cmd 显式指定解释器路径
避免依赖环境变量,尤其是跨项目、多虚拟环境时。python 命令可能指向任意版本,而 sys.executable 输出才是真相。
- Windows 推荐用
shell_cmd(更兼容带空格路径):"shell_cmd": "C:\Python39\python.exe -u "$file"" - macOS/Linux 推荐用
cmd数组写法:"cmd": ["/Users/you/venv/bin/python", "-u", "$file"] - 路径含中文或空格?优先用
shell_cmd+ 双引号包裹整个命令,cmd数组方式对空格处理不稳定 - 验证是否生效:在 Python 文件里加一行
import sys; print(sys.executable),Ctrl+B运行后看输出路径是否符合预期 - 别把多个解释器塞进同一个文件里——Sublime 不支持 JSON 数组或多个根对象,每个
.sublime-build只定义一个行为
用 variants 实现同一语言下的多操作模式
比如 C++ 项目既要编译,又要编译+运行,不用建两个构建系统文件,靠 variants 就能在一个文件里搞定。
- 主
cmd定义默认行为(通常是编译),variants数组定义额外操作 - 示例中加一个
"name": "Run"的 variant,"cmd": ["./$file_base_name"],保存后Ctrl+Shift+B就能唤出菜单选“Run” - 支持跨平台:可在
variants里分写osx、windows、linux字段,避免一条命令到处报错 - 别漏掉
"working_dir": "$file_path",否则./xxx执行时可能找不到生成的二进制文件 - 容易被忽略的点:
variants不会自动出现在Build System菜单里,必须用Ctrl+Shift+B或 Command Palette 搜索 “Build With” 才能调出
真正麻烦的从来不是写 JSON,而是路径拼错、selector 写宽泛了、文件放错目录,或者以为 variants 会自动显示在构建系统菜单里。验证前先跑一句 sys.executable,比反复猜强得多。











