Sublime Text 关闭时不生成 .bak 等备份文件,因其原生不支持保存时复制备份,仅依赖 atomic_save、hot_exit 和 save_on_focus_lost 实现防丢;需通过 AutoSave 插件配合 shell 命令手动实现真实备份。

Sublime Text 关闭时不会自动创建可手动恢复的备份文件(比如 .bak 或时间戳副本),它默认只做原子写入和会话缓存——所谓“自动备份”,其实是靠 hot_exit + save_on_focus_lost 配合实现的防丢机制,不是传统意义的文件副本。
为什么直接关 Sublime 不会生成 .bak 文件
Sublime Text 原生不支持保存时复制备份文件。它的 atomic_save(默认开启)仅保证单次写入不被中断破坏,hot_exit 只把未保存内容记入内存会话,不落盘;二者都不产生额外文件。如果你期望类似 Vim 的 myfile.txt~ 或 VS Code 的本地历史,必须借助插件或外部脚本。
用 AutoSave 插件 + 保存钩子生成真实备份文件
这是目前最可行的方案:安装 AutoSave 插件后,通过自定义保存后命令触发系统命令复制文件。
- 先按
Ctrl + Shift + P→ 输入Package Control: Install Package→ 安装AutoSave(作者 randy3k,v4.1+) - 打开
Preferences → Package Settings → AutoSave → Settings – User - 填入最小可用配置(注意:不是改通用
User Settings):
{
"auto_save_on_idle": false,
"auto_save_on_focus_lost": true,
"auto_save_hooks": {
"on_post_save_async": [
["shell_command", "cp \"$file\" \"$file.bak\""]
]
}
}
⚠️ 注意:$file 是插件提供的变量,Windows 用户需改用 copy 命令并处理路径空格;macOS/Linux 用户建议加 2>/dev/null 忽略只读文件报错。
hot_exit 和 save_on_focus_lost 不是备份,但能防止关闭丢数据
很多人误以为开 hot_exit 就等于“备份”,其实它只是把未保存状态存在内存里。真正防丢的关键组合是:
-
save_on_focus_lost: true → 切出窗口时真实写入磁盘(防断电、崩溃) -
hot_exit: "always" → 关闭软件时不弹窗,但前提是上一步已落盘;否则下次启动看到的是上次成功保存前的内容 -
remember_open_files: true → 启动时恢复标签页列表(不含未保存修改)
三者配合才能做到:改完 → 切到终端 → 回来发现已存 → 关软件 → 静默退出 → 下次打开所有文件都在,且内容是最新的。
最容易被忽略的一点:如果文件正被其他进程占用(比如 tail -f app.log),save_on_focus_lost 会静默失败,hot_exit 却仍把它记为“已修改”,下次启动加载的还是旧内容——这种情况下,连插件生成的 .bak 也可能是过期的。











