Sublime Text“一键运行”实为Build System调用系统解释器,需手动配置Python.sublime-build:cmd用["python", "-u", "$file"](Windows写死路径),file_regex设为"^File \"(...*?)\", line ([0-9]+)",保存至Packages/User/。

Sublime Text 本身不带运行脚本的能力,所谓“一键运行”,本质是靠 Build System 调用系统命令行执行解释器(比如 python、node、bash),再把输出捕获到面板里。它不是真正的集成终端,也不自动处理路径、环境变量或依赖安装。
怎么创建一个可用的 Python 编译系统
手动写 JSON 配置最可靠,避免插件引入的不可控行为。关键点是:cmd 必须写对解释器路径和参数顺序,file_regex 决定能否双击跳转错误行。
-
cmd推荐用["python", "-u", "$file"]:加-u是为了禁用输出缓冲,否则 print 不会实时显示 - Windows 用户如果没配环境变量,得写死路径,比如
["C:\\Python39\\python.exe", "-u", "$file"](注意双反斜杠) -
file_regex设为"^File \"(...*?)\", line ([0-9]+)"才能正确解析 Python 报错位置 - 保存为
Python.sublime-build,放在Packages/User/目录下(可通过Preferences → Browse Packages…进入)
Node.js 脚本运行时 stdout 不刷新怎么办
Node 默认对 TTY 输出做行缓冲,但 Sublime 的构建系统不提供伪终端(pty),所以 console.log("hello") 可能卡住不显示,直到进程退出或缓冲满。
- 临时解决:在 JS 文件开头加
process.stdout.setEncoding('utf8'); process.stdout._handle.setBlocking(true);(不推荐) - 正解:改用
["node", "--unhandled-rejections=warn", "-u", "$file"],其中-u启用未缓冲模式(Node v15.12+ 支持) - 更稳方案:用
["sh", "-c", "node $file"](macOS/Linux)或["cmd", "/c", "node $file"](Windows),借 shell 层转发输出
为什么 Ctrl+B 没反应或报 “No build system”
常见原因不是配置没生效,而是当前文件没关联到对应构建系统,或构建系统语法有硬伤。
- 检查右下角状态栏是否显示语言类型(如
Python)——只有匹配selector或手动指定,构建系统才会默认启用 - 如果没设
selector,必须先通过Tools → Build System → Python手动选中一次 - JSON 格式错误会导致整个
Packages/User/下的构建系统失效,用在线 JSON 校验器(如 jsonlint.com)粘贴内容快速排查 - Mac 上若用 Homebrew 安装的 Python,
python命令可能指向 pyenv 或 shims,建议用which python确认真实路径
真正麻烦的从来不是写那个 JSON 文件,而是不同系统对路径分隔符、空格、shell 转义的处理差异——比如 Windows 的 cmd 里双引号要转义,而 macOS 的 sh 里空格路径必须用引号包住,这些细节一旦漏掉,Ctrl+B 就只会静默失败。










