sublime text 原生不支持自动备份文件,仅提供 save_on_focus_lost 防丢落盘和 .sublime-swpx 临时恢复;真备份需 autosave 插件 + on_post_save 脚本实现 .bak 或时间戳副本,配合 git 构成三层防护策略。

Sublime Text 原生不支持保存时生成 .bak、~ 或带时间戳的副本文件——你无论怎么翻设置、装插件,都找不到一个开关能“一开就自动备份”。所谓“备份”,必须靠外部脚本监听保存事件手动复制,否则只有崩溃恢复用的 .sublime-swpx 临时交换文件,不可手动读取或回滚。
save_on_focus_lost 是防丢底线,不是备份
它只做一件事:你切出 Sublime 窗口(比如点到终端或浏览器),立刻把所有已修改文件写回磁盘。这不是备份,是落盘;不生成任何额外文件,也不保留历史版本。但它是最稳的防崩溃/断电丢数据手段。
-
save_on_focus_lost必须设为true,且要关掉hot_exit和remember_open_files,否则窗口关闭时内容可能只暂存内存,没真正写入 - 新建未命名文件(
untitled:标签页)不会触发该行为,必须先Ctrl+S保存一次才有路径可写 - 它对 Git 友好,不会在未提交前制造多余 diff,也不会干扰
nodemon、webpack --watch等监听进程
AutoSave 插件 + on_post_save 监听才能真备份
想每次保存都拷一份 .bak 或时间戳文件,得靠 AutoSave 插件配合自定义 Python 脚本。插件本身不备份,只是提供 on_post_save 事件钩子。
- 先通过
Package Control: Install Package安装AutoSave(作者 randy3k) - 禁用原生
save_on_focus_lost,否则插件的保存逻辑可能被跳过 - 在
Preferences → Browse Packages → User下新建auto_backup.py,写入监听逻辑 - 用
shutil.copy2(file_path, backup_path),比copy多保留修改时间戳 - Windows 路径必须用双反斜杠
C:\backup或正斜杠C:/backup,单反斜杠C:ackup会报错
备份路径和命名容易踩坑
直接覆盖同名文件看似简单,但实际场景中极易误删或混淆版本;加时间戳又得避开非法字符和长度限制。
- 时间戳建议用
time.strftime("%Y%m%d_%H%M%S"),不用:、*等 Windows 不允许的字符 - 完整路径总长别超 260 字符(Windows 默认限制),
backup_path构造时优先用短目录名 - 中文文件名在旧版 Sublime 中可能触发
UnicodeEncodeError,加try/except包裹更稳妥 - 频繁保存小文件会产生大量备份,需额外配定时清理脚本(如每天删 7 天前的)
Local History 插件 ≠ 自动备份,别混用
它存的是快照(.sublime-history/),不是副本文件,且只响应 Sublime 内部编辑动作——命令行改、Git checkout、IDE 同步覆盖,它完全感知不到。
- 安装后默认每 2 分钟抓一次,也可手动调用
Local History: Save Current File -
.sublime-history/必须留在项目根目录,挪走或删掉就丢全部历史 - 如果同时开了
AutoSave插件,on_post_save+ 快照可能在 1 秒内连发,导致冗余或因文件被占用而静默失败 - 快照不加密、不压缩、不校验,仅用于临时回滚;重要项目仍需
git commit或外部备份
真正可靠的“备份”从来不是靠一个开关,而是组合策略:用 save_on_focus_lost 防断电丢当前内容,用 on_post_save 脚本生成可检索的副本,再用 git 管理语义化版本——三者职责分明,缺一不可。











