build system根本没反应,首要排查终端能否执行对应命令;若python3 --version等失败,则sublime必静默失败,因它不继承shell环境且依赖系统已安装工具。

Build System 为什么根本没反应?先查终端能不能跑通命令
Sublime 的 Build System 不是独立编译器,它只是调用你系统里已装的工具(比如 python3、g++)。如果在终端里执行 python3 --version 或 g++ --version 都报 “command not found”,那 Sublime 的任何配置都会静默失败——连错误提示都不会有。
常见卡点:
- macOS/Linux 用户装了 Homebrew Python,但没运行
brew install python后的 shell 初始化(~/.zshrc没 source) - Windows 用户装了 Python,但安装时没勾选 “Add Python to PATH”
- Conda 或 pyenv 管理的环境,未激活或未设为默认,导致终端里
which python找不到
验证方式:打开系统终端(不是 Sublime 自带的 console),直接敲 python3 --version。能返回版本号,才继续下一步。
cmd 数组 vs shell_cmd:别用字符串拼接命令
shell_cmd 是字符串,依赖 shell 解析,跨平台极不稳定;cmd 是数组,Sublime 自动拼接参数,天然防空格、防引号崩、防 Windows 下变量失效。
危险写法(尤其 Windows):
{
"shell_cmd": "python3 $file"
}
这在 Windows 上会直接报 “不是内部或外部命令”,因为 cmd.exe 根本不认识 $file 变量。
安全写法:
{
"cmd": ["python3", "-u", "$file"],
"working_dir": "$file_path"
}
-
-u必须紧跟解释器后,确保输出不缓冲 -
$file和$file_path只在cmd或shell_cmd字段里生效,写在working_dir里无效 - Windows 用户若用
py启动器,写成["py", "-3.11", "-u", "$file"],注意-u位置不能错
中文乱码、交互输入失败:不是编码问题,是进程环境隔离
Sublime 启动的子进程不继承你终端的环境变量,PATH、PYTHONIOENCODING 全部丢失。所以即使你在 zsh 里 export 过 PYTHONIOENCODING=utf-8,Sublime 也看不到。
解决中文输出乱码:
{
"cmd": ["python3", "-u", "$file"],
"env": {"PYTHONIOENCODING": "utf-8"}
}
这个 env 字段只作用于当前构建进程,不影响 Sublime 主体。
交互式输入(input())卡住?Sublime 原生 build 不支持 stdin 输入。要么:
- 用
Terminus插件开终端跑 - 把
cmd改成调用系统终端:["open", "-a", "Terminal.app", "--args", "python3", "$file"](macOS) - Windows 下用
["cmd", "/c", "start", "cmd", "/k", "python", "$file"]
文件没保存就按 Ctrl+B?$file 展开为空字符串
$file 是磁盘路径变量,只在文件已保存(即有真实路径)时才展开。未保存的 tab(标题栏显示 “Untitled”)会导致命令变成 python3 "",结果是报错或无声失败。
必须养成习惯:
- 写完代码,先按
Ctrl+S(Windows/Linux)或Cmd+S(macOS)保存 - 右下角语法识别必须匹配:View → Syntax → Python,否则
selector不生效,构建系统不会出现在菜单里 -
selector写成"source.python",不是"Python"或"python"
真正容易被忽略的是:Build System 文件必须放在 Packages/User/ 目录下,后缀为 .sublime-build,改完要手动刷新(Tools → Build System → Refresh Projects)或重启 Sublime——放错路径、命名不规范、没刷新,三者任一都等于没配。











