Sublime Text默认Python编译系统不能通过「首选项→设置」修改,必须在Packages/User/目录下创建并配置正确的.sublime-build文件,路径、selector、-u参数缺一不可。

Sublime Text 默认的 Python 编译系统不能通过「首选项 → 设置」直接修改——那个界面改的是编辑器行为(比如字体、缩进),不是构建逻辑。真正起作用的,是放在 Packages/User/ 目录下的 .sublime-build 文件。改错地方,Ctrl+B 就永远没反应。
Build System 文件必须放对位置,否则根本不会出现
Sublime Text 只加载 Packages/User/ 下的 .sublime-build 文件,其他路径一律无视:
- 桌面、项目根目录、
Packages/Python/里建的同名文件,菜单里压根不显示 - 用菜单 Preferences → Browse Packages… 打开后,直接进
User/子文件夹新建文件 - 文件名任意,但后缀必须是
.sublime-build(例如Python3_Custom.sublime-build)
cmd 和 shell_cmd 到底该用哪个?Windows/macOS/Linux 表现不同
关键区别在于环境变量继承和路径解析方式:
-
cmd是数组形式:["python3", "-u", "$file"],跨平台兼容性好,但 Windows 路径含空格时必须写双反斜杠+引号:["C:\Program Files\Python311\python.exe", "-u", "$file"] -
shell_cmd是字符串形式:"python3 -u "$file"",走系统 shell 解析,自动处理空格和引号,macOS/Linux 更稳;Windows 下如果 Sublime 不是从终端启动,可能拿不到你的PATH - 多版本共存(如 conda 或 pyenv)时,
cmd写死绝对路径最可靠;日常开发用shell_cmd更省心
selector 写错,Build System 就不会自动激活
selector 匹配的是 Sublime 的语法作用域(scope),不是文件扩展名:
- Python 文件的作用域是
source.python,不是.py - C++ 文件是
source.c++或source.cpp,不是.cpp - 打开一个
.py文件,按Ctrl+Shift+P输入Inspect Scope,看光标处实际 scope 是什么 - 想“万能运行”任意文本文件,可用
"selector": "source | text",但要配合shell_cmd里加后缀判断逻辑
为什么 print() 没输出、程序一闪而过?-u 和输入阻塞是关键
两个最常被忽略的点:
-
-u参数必须加在命令里(如python -u "$file"),否则 Python 输出缓冲,print()内容可能延迟甚至完全不显示在 Sublime 控制台 - 程序运行完立刻退出,是因为控制台不是交互式终端;C/C++ 可加
getchar();,Python 可末尾加input()阻塞等待回车 - 不要试图在
shell_cmd里塞start cmd /k ...类命令——Sublime 构建面板不支持新开窗口,强行搞只会失败
真正的难点不在 JSON 语法,而在于:你写的路径是否真实存在、Sublime 是否能访问到那个解释器、scope 是否匹配、以及输出是否被缓冲。这些细节一错,整个构建系统就静默失效——连报错都不会有。











