项目构建系统必须写在.sublime-project文件的build_systems顶层字段中,通过project→save project as…保存并project→open project…加载后才生效,仅限该项目显示和使用。

构建系统怎么在项目里生效而不是全局
Sublime 的构建系统默认是全局注册的,但通过 .sublime-project 文件内嵌 build_systems 字段,就能让某个构建系统「只属于这个项目」——打开其他项目时它不会出现在 Tools → Build System 菜单里,也不会被自动匹配。
关键不是“禁用”,而是“不注册”:只有当前项目文件里声明的构建系统,才会被 Sublime 加载进当前会话。
- 必须先保存项目为
.sublime-project文件(Project → Save Project As…) - 必须通过
Project → Edit Project编辑,不能新建一个独立的.sublime-build文件丢进Packages/User/ - 如果同时存在同名的全局构建系统和项目内构建系统,项目内的会优先覆盖(但仅限该项目)
为什么写了 selector 却没自动选中
selector 匹配失败是最常见的“看似配置了却无效”原因。它不看文件后缀,而依赖 Sublime 内部的语法作用域(scope),比如 .py 文件的作用域是 source.python,不是 python 或 .py。
- 打开目标文件(如
main.py),按Ctrl+Shift+P(Windows/Linux)或Cmd+Shift+P(macOS),输入Inspect Scope查看光标处真实 scope - 常见 scope 值:
source.python、source.js、source.shell、text.html.basic - 若想对任意文本类文件生效,可用
"selector": "source | text",但要注意$file在未保存文件时为空字符串,会导致命令执行失败
如何指定项目专属 Python 解释器路径
项目级构建系统最实用的场景之一,就是调用虚拟环境里的 Python,避免混用系统或全局解释器。
- 在
.sublime-project的build_systems中写死路径,例如:"cmd": ["./venv/bin/python", "-u", "$file"](macOS/Linux)或"cmd": ["venv\Scripts\python.exe", "-u", "$file"](Windows) - 路径是相对于项目根目录的,不是相对于
.sublime-project文件位置 - 推荐用
$project_path变量增强可移植性:"cmd": ["$project_path/venv/bin/python", "-u", "$file"] - 务必设
"working_dir": "$file_path",否则import可能因路径错乱而失败
项目构建系统失效的三个隐蔽原因
即使 JSON 看起来完全正确,构建系统也可能静默失效,且 Sublime 不报错。
- JSON 格式错误:多一个逗号、少一个引号、用了中文引号 —— Sublime 会跳过整个
build_systems数组,控制台(Ctrl+`)可能显示Invalid project settings - 项目未真正激活:双击
.sublime-project文件打开,或用Project → Open Project…;单纯把文件夹拖进 Sublime 是“未激活项目”,此时项目配置不加载 -
build_systems放错位置:它必须是.sublime-project的顶层字段,不能嵌在settings或folders里
最稳妥的验证方式:打开项目内任意支持该 selector 的文件,然后看 Tools → Build System 菜单里有没有你定义的名字 —— 没有,就说明项目文件根本没被识别或解析失败。











