能,但必须手动配,且路径、作用域、缓冲控制三处最容易卡住;build system 文件必须放在 packages/user/ 目录下才生效,仅加载该路径的 .sublime-build 文件,其他位置一概无视,cmd 必须为数组格式并正确转义路径,selector 需匹配语法作用域(如 source.python),$file 要求文件已保存。

能,但必须手动配,且路径、作用域、缓冲控制三处最容易卡住。
Build System 文件必须放在 Packages/User/ 才生效
Sublime Text 只加载 Packages/User/ 目录下的 .sublime-build 文件,其他任何位置(桌面、项目根目录、Packages/MyLang/)一概无视。这不是“可能不生效”,而是硬性限制——文件放错位置,菜单里根本不会出现对应构建项,按 Ctrl+B 也完全没反应。
- 用菜单
Preferences → Browse Packages…直接打开Packages/目录,再进User/子文件夹新建文件 - 文件名随意,但后缀必须是
.sublime-build(例如Python3_Run.sublime-build) - 别双击桌面文件再拖进 Sublime —— 这样保存路径仍是桌面,不会自动移到
User/
cmd 字段写错路径或参数顺序就执行失败
cmd 必须是数组形式,不是字符串;Windows 路径含空格时必须加引号且用双反斜杠转义;macOS/Linux 依赖 PATH,但多版本共存时建议写死解释器路径。
- Windows 示例:
["C:\Program Files\Python39\python.exe", "-u", "$file"](注意双反斜杠和引号包裹整个路径) - macOS/Linux 示例:
["/usr/local/bin/python3.11", "-u", "$file"](先运行which python3.11确认真实路径) - 避免用
python别名,尤其在 conda/virtualenv 环境中,它可能指向旧版本或系统 Python -
-u参数很重要,它禁用输出缓冲,否则print()内容可能延迟显示甚至不显示
selector 匹配不上,构建系统就不会自动激活
selector 不是文件扩展名,而是 Sublime 的语法作用域(scope)。比如 Python 文件的 scope 是 source.python,不是 .py;JS 是 source.js,不是 .js。匹配不上,即使文件是 .py 后缀,也不会自动选中该构建系统。
- 打开一个目标文件(如
test.py),按Ctrl+Shift+P(Windows)或Cmd+Shift+P(macOS),输入Inspect Scope查看当前光标处的实际 scope - 常见 scope 值:
source.python、source.c、source.cpp、source.shell - 如果想“万能运行”任意文本文件,可用
"selector": "source | text",但需配合shell_cmd和脚本判断后缀
$file 变量要求文件已保存
$file 展开为磁盘上的绝对路径;如果文件从未保存过(标签页显示 Untitled),$file 就是空字符串,命令变成类似 python -u "",直接报错退出。
- 未保存的文件无法构建,必须先
Ctrl+S保存到磁盘 - 保存后,
$file_base_name才能正确提取不含扩展名的文件名(如main),用于后续编译 + 运行组合操作 - Java 或 C 类构建系统中,
$file_base_name常用于生成可执行文件名或类名,拼错会找不到输出或类
真正容易被忽略的是:Sublime 不继承终端的 PATH 和环境变量,哪怕你在命令行里能直接敲 javac 或 g++,Sublime 里照样找不到——必须写死绝对路径,或者用 shell_cmd 借 shell 层转发。这点在 Java 和 C/C++ 配置里最常翻车。











