Sublime Text 的 Ctrl+Z 不是历史记录而是线性撤销栈,关文件或重启即清空;防误删需三道防线:系统级只读、Local History 插件备份、缓存文件兜底。

Sublime Text 没有多级撤销历史面板,所谓“多级撤销”仅限当前文件未关闭时的内存栈,关文件或重启即清空;真要防误删核心代码,不能靠 Ctrl+Z,得靠系统级只读 + 插件备份 + 缓存兜底三道防线。
为什么 Ctrl+Z 不能当“历史记录”用
它只是线性栈,不是时间轴:每按一次 Ctrl+Z 回退一步编辑动作(插入、删除、替换),但不记录时间、不支持预览、不跨文件。一旦你:
• 切换标签页
• 关闭再重开该文件
• 重启 Sublime Text
• 或执行了查找/跳转等非编辑操作
整个撤销栈就断了——Ctrl+Z 按出来是空白,不是“没动作”,是“栈已销毁”。
默认最多存 100 步,但你根本看不到列表,也不知道第 47 步删的是哪行。想靠它找回昨天改错的 config.yaml?不可能。
真正能救回删掉的代码的三个路径
别等删完再找补,得提前布防:
-
系统级只读(最硬防护):对
config.yaml、settings.json这类核心文件,Windows 右键 → 属性 → 勾“只读”并点“全部应用”;macOS 右键 → 显示简介 → 底部勾“锁定”;Linux 执行chmod 444 /path/to/file。设完 Sublime 状态栏显示read only,Ctrl+S直接报Permission denied,不弹确认框、不缓存、不给你反悔机会。 -
Local History 插件(有保存才生效):必须满足三个条件——文件已
Ctrl+S保存过、路径没变(不能删了重新建同名)、插件已启用。改一行 →Ctrl+S→ 再改 →Ctrl+S→ 右键 →Show History,才能看到带时间戳的快照。注意:Restore是覆盖写入,想比对就点历史条目,在新标签页只读打开。 -
缓存文件兜底(没保存也能捞):路径在
C:\Users\用户名\AppData\Roaming\Sublime Text 3\Local\Recovery\(Windows)或~/Library/Application Support/Sublime Text 3/Local/Recovery/(macOS)。里面是按时间戳命名的.tmp文件,用文本编辑器直接打开搜关键词。但前提是hot_exit为true(Preferences → Settings 确认),且 Sublime 没被强制杀进程。
Ctrl+U 和 Esc 不是撤销,是光标控制开关
很多人手滑选错变量,狂按 Ctrl+Z 结果把刚写的逻辑也撤了——其实该用 Ctrl+U:
Ctrl+U 只倒退光标添加动作:你 Ctrl+D 选了 6 处,第 4 处是误匹配?按两次 Ctrl+U 就剩 4 个光标,文字内容完全不动。但它依赖底层光标链路,如果用户设置里 "drag_text": true,Ctrl+U 可能失效,必须手动改成 false。
Esc 是更彻底的“安全落地”:多光标状态下点鼠标容易误触折叠/拖拽/选中整行,Esc 一键清空所有辅助光标,只留主光标,不进撤销栈、不依赖焦点位置、不触发任何副作用。
容易被忽略的致命细节
所有“历史”机制都默认假定你信任自己不会手抖——但误操作恰恰发生在你最不设防的时候。比如:
• Session.sublime_session 里存的是窗口状态,不是文件快照,删它清不掉编辑历史,只清“最近打开”
• BackupOnSave 和 Simple History 不能共存,同时开会导致菜单冲突或重复备份
• 插件生成的备份路径若含中文或空格,某些脚本可能解析失败
• 大文件(如日志)只设只读还不够,得在用户设置里加 "draw_white_space": "none" 防卡死
真正的防护不是“怎么撤销”,而是让撤销根本没必要发生。


















