sublime text 的 .sublime-build 文件必须置于 packages/user/ 目录下才生效;文件名需为合法 json 格式、后缀为 .sublime-build,selector 决定其适用文件类型,变量如 $file 仅在 cmd 或 shell_cmd 中有效。

多个.sublime-build文件必须放在User包目录下
Sublime 不会自动扫描项目目录或任意路径下的构建文件,只认 Packages/User/ 这个固定位置。新建一个构建系统后,保存时默认路径就是它;如果手动移动过文件,或用其他编辑器改过,务必确认最终路径是 Packages/User/xxx.sublime-build(Windows 通常是 %APPDATA%Sublime TextPackagesUser,macOS 是 ~/Library/Application Support/Sublime Text/Packages/User/)。
常见错误现象:Tools → Build System 菜单里看不到刚建的选项,或选了没反应——八成是文件没放对地方,或者扩展名不是 .sublime-build(比如误存为 .json 或带隐藏后缀)。
- 不要把多个构建系统塞进同一个文件里,Sublime 不支持 JSON 数组或多个根对象
- 每个文件名建议体现用途,比如
Python3.11.sublime-build、Go-Dev.sublime-build,避免用空格或中文命名(部分版本解析会出错) - 文件内容必须是合法 JSON:不能有注释、末尾不能多逗号、字符串全用双引号
selector 决定“什么时候自动出现”,别乱删
selector 字段不是摆设,它控制 Sublime 在打开某类文件时,是否把这个构建系统列为默认候选。比如 "selector": "source.python" 表示只在 Python 语法高亮的文件中显示该构建项;而 "selector": "source" 会让它出现在所有源码类文件(包括 JS、Go、Rust)里,容易误点。
真实使用场景:你同时有 Python 和 TypeScript 项目,各自需要不同解释器和参数。这时应分别配置两个文件,各自写明 "selector": "source.python" 和 "selector": "source.ts",打开 .py 文件时,菜单里只会优先推荐 Python 构建系统。
- 查不准 selector 值?打开一个目标文件 →
Ctrl+Shift+P→ 输入Syntax: Show Syntax,就能看到当前文件实际使用的 selector 名称 - 想让某个构建系统对多种语言生效,用英文逗号分隔:
"selector": "source.python, source.js" - 删掉
selector字段会导致它出现在所有文件类型菜单里,看似“万能”,实则干扰大
Windows 下 py 启动器比硬写 python.exe 更可靠,但得配对参数顺序
Windows 用户常卡在 py -3.11 -u "$file" 报 unrecognized arguments: -u。这不是 Sublime 的 bug,而是 py 启动器的参数解析规则:它只把紧挨在版本号后面的参数传给 Python 解释器,-u 必须紧跟 -3.11,不能插在中间或放后面。
正确写法是:"cmd": ["py", "-3.11", "-u", "$file"];错误写法如 ["py", "-u", "-3.11", "$file"] 或 ["py", "-3.11", "$file", "-u"] 都会失败。
- 先在 CMD 运行
where py确认路径,如果没输出,说明C:Windows不在系统 PATH,要么加进去,要么直接用绝对路径"cmd": ["C:\Windows\py.exe", "-3.11", "-u", "$file"] - 不用
py的话,必须写 Python 安装目录的绝对路径,且路径含空格时整个字符串要被双引号包裹(JSON 里用反斜杠转义):"cmd": ["C:\Program Files\Python311\python.exe", "-u", "$file"] -
-u一定要加,否则print输出可能缓冲不刷新,看着像卡住
中文乱码和终端一闪而过,其实是两个独立问题
中文输出变成 或报 UnicodeEncodeError,根源是 Windows 控制台默认 GBK 编码,而 Python 脚本和 Sublime 输出面板默认 UTF-8。加 "encoding": "utf-8" 只管 Sublime 自己怎么解码输出流,不改变终端底层编码。
终端一闪而过(尤其 Windows),是因为命令执行完就退出,根本没等你看清输出。这两个问题不能混着解决,得分开处理。
- 解决乱码:加
"env": {"PYTHONIOENCODING": "utf-8"},这是最稳方案;"shell_cmd": "chcp 65001 & python -u "$file""也可行,但shell_cmd对空格和引号更敏感,容易拼错 - 解决一闪而过:Windows 下改用
"cmd": ["cmd", "/c", "python", "-u", "$file", "&", "pause"];macOS/Linux 不建议硬加read,而是用插件如 Terminus 启动真正终端 - 别指望一个配置同时解决所有平台问题,跨平台项目建议按系统拆文件,用
platforms字段区分(高级用法,普通需求直接建两套)
$file 和 $file_path 在 Windows 下反斜杠需转义;以及 shell 字段在 Windows 上对 gcc 类命令几乎是刚需,但对 python 反而容易引发引号解析错误。











