项目专属构建系统必须定义在.sublime-project文件的build_systems字段中,不能仅将.sublime-build文件放在项目根目录;其cmd须为数组、selector需匹配语法、$project_path确保工作目录正确,且该构建系统不会出现在tools→build system菜单中,仅通过ctrl+b或build with…触发。

项目专属构建系统必须用 .sublime-project 文件定义
Sublime Text 不支持“为当前项目直接绑定某个 .sublime-build 文件”,所有项目级构建系统配置都必须写进 .sublime-project 文件的 build_systems 字段里。你不能只把 Python3.sublime-build 放在项目根目录下就让它自动生效——它压根不会被加载。
正确做法是:先确保你已通过 Project → Save Project As… 生成了 myproject.sublime-project,然后手动编辑该文件,在顶层 JSON 中添加 build_systems 数组:
{
"folders": [
{
"path": "."
}
],
"build_systems": [
{
"name": "Run Python (Project)",
"cmd": ["/usr/bin/python3", "-u", "$file"],
"selector": "source.python",
"working_dir": "$project_path",
"file_regex": "^[ ]*File "(.+?)", line ([0-9]+)"
}
]
}
注意:"cmd" 是数组格式(不是字符串),"working_dir": "$project_path" 确保运行时工作目录是项目根,而不是当前文件所在子目录;"selector" 仍需保留,否则 Ctrl+B 不会自动匹配。
build_systems 里的 cmd 和全局 .sublime-build 写法一致
项目内定义的构建系统,其字段语义和行为与 Packages/User/ 下的 .sublime-build 完全相同,包括:
-
cmd必须是数组,Windows 路径含空格时得加双引号、用双反斜杠(如["C:\Program Files\Python312\python.exe", "-u", "$file"]) -
shell默认为false;设为true时cmd变成字符串,且只能用shell_cmd字段(cmd字段会被忽略) -
$file、$project_path等变量照常可用,但$file仅在文件已保存时才展开,未保存的临时标签页会报错 - 不支持
file字段指向外部.sublime-build—— Sublime 不解析项目配置里的路径引用
项目构建系统不会出现在 Tools → Build System 菜单中
这是最容易困惑的点:你在 .sublime-project 里定义的构建系统,不会 出现在 Tools → Build System 下拉菜单里。它只对该项目生效,且仅当项目已打开、且当前文件匹配 selector 时,Ctrl+B 才会触发它。
验证是否生效的方法:
- 确认右下角显示的 syntax 是
Python(即 scope 为source.python) - 按 Ctrl+Shift+P 输入 Build With…,看是否列出你定义的
"name"(如Run Python (Project)) - 如果没出现,检查
.sublime-project是否是合法 JSON、build_systems是否在顶层、selector是否拼写正确
一旦选中并执行,输出面板会显示结果;若失败,错误信息通常很安静——建议临时加 "quiet": false 查看完整命令和 stderr。
混用项目配置和全局 .sublime-build 的优先级陷阱
项目配置中的构建系统和 Packages/User/ 下的 .sublime-build 是两套独立机制,不存在“覆盖”关系。它们的触发逻辑不同:
- 全局
.sublime-build:靠selector匹配当前文件 syntax,匹配成功后出现在菜单中,可手动选择 - 项目
build_systems:只在本项目内生效,且只响应 Ctrl+B(或 Build With…),不进入菜单
如果你同时有同名构建系统(比如都叫 Python3),它们互不影响;但容易误以为“改了项目配置,全局那个也变了”。真正要隔离环境,就得彻底删掉全局的同名文件,或确保项目配置里用唯一 name。
最易被忽略的一点:$project_path 在多根项目(multi-root workspace)中行为未定义,Sublime 当前版本只认第一个 folder 的路径作为 $project_path —— 如果你依赖项目根下的 pyproject.toml 或 venv,务必确认它确实在第一个 folder 里。











