sublime构建系统本身不生成临时文件,真正需清理的是构建调用的外部命令残留;清理应内联于cmd数组(如&&连接)、用跨平台python脚本或post-build插件实现,因其无内置清理机制。

Sublime构建系统本身不生成临时文件,真正要清理的是构建过程调用的外部命令残留
Sublime 的 sublime-build 文件只是个配置容器,它不自己写临时文件——真正产垃圾的是你让构建系统执行的命令,比如 python、node、make 或自定义脚本。常见场景包括:python -m py_compile 生成 __pycache__/,gcc 输出 .o 或 .exe,npm run build 留下 dist/ 或 .tmp/。构建系统只负责“喊人干活”,不负责“扫地”。
在构建命令里内联清理,最直接有效
把清理逻辑塞进 "cmd" 数组里,用 shell 连接符串起来。注意平台差异和执行顺序:
- Windows(cmd.exe):用
&&保证前一条成功才执行下一条,例如["cmd", "/c", "python $file && del /q *.pyc __pycache__"] - macOS/Linux(sh/bash):同样用
&&,但路径通配更灵活,例如["sh", "-c", "python \"$file\" && rm -f *.pyc __pycache__/"] - 跨平台安全写法:避免依赖 shell 内置命令,改用 Python 自带模块清理,例如
["python", "-c", "import sys, shutil, os; exec(open(sys.argv[1]).read()); [shutil.rmtree(x) for x in ['__pycache__'] if os.path.isdir(x)]; [os.remove(x) for x in os.listdir('.') if x.endswith('.pyc') or x.endswith('.pyo')]"](慎用,可读性差)
用 post-build 插件接管,适合复杂清理逻辑
原生构建系统不支持 post_build 钩子,但可通过插件实现。推荐轻量方案:Exec 替代品或自定义插件监听 on_post_build 事件。实际操作中更稳妥的做法是:
- 安装
Terminus插件,它支持在构建后自动执行命令,且能捕获输出;配置时在shell_cmd后加&& cleanup.sh - 自己写一个极简插件:监听
on_post_build事件,检查view.window().active_view().file_name()所在目录,再调用shutil.rmtree或os.remove——但要注意 Sublime 的 Python 沙箱不支持subprocess调外部命令,只能用内置模块 - 别指望
Package Control提供的“构建后清理”插件:目前没有主流插件稳定支持该功能,多数已停更或与 ST4 不兼容
为什么不能靠构建系统设置自动清理?
因为 Sublime 构建系统的设计目标是“执行并展示输出”,不是“管理文件生命周期”。它的配置项如 "working_dir"、"env"、"variants" 全部围绕执行环境展开,没有 "cleanup_patterns" 或 "delete_on_success" 这类字段。强行想用 JSON 配置驱动清理,本质是误判了它的职责边界。
真正容易被忽略的点是:很多开发者花时间找“构建系统内置清理开关”,结果发现根本不存在;转头去删 Packages/ 下的 .tmp 文件夹,又完全不相关——那属于 Package Control 更新失败的残留,和构建输出毫无关系。清理动作必须锚定在你调用的具体命令上,而不是构建系统本身。











