VS Code自动保存与恢复需files.autoSave、files.hotExit、files.restoreWindows协同控制;autoSave仅写入磁盘,hotExit决定退出时是否暂存未保存内容,restoreWindows控制启动时是否还原窗口状态。

VS Code 的自动保存和恢复不是靠“开启某个开关”就能一劳永逸的,它由多个独立配置项协同控制,且行为会因文件是否已保存、是否在工作区、是否启用备份等条件而变化。直接改 files.autoSave 可能没效果,因为 files.hotExit 或 files.restoreWindows 被禁用时,编辑器根本不会尝试恢复未保存内容。
如何让文件修改后自动写入磁盘(autoSave)
这是最常被误解的一点:自动保存 ≠ 自动存档。它只决定 VS Code 是否在切换焦点或一段时间后把当前缓冲区内容写入文件系统,不涉及崩溃恢复。
-
files.autoSave有四个可选值:off(默认)、afterDelay、onFocusChange、onWindowChange - 推荐设为
afterDelay,再配合files.autoSaveDelay(单位毫秒,默认 1000),避免频繁写入影响性能 - 注意:
onFocusChange在编辑器内点击不同 tab 时触发保存;onWindowChange是切到其他应用时才保存,容易漏存 - 未保存的文件(无路径的 untitled-* 文件)不会触发 autoSave,必须先执行一次“另存为”
为什么关掉 VS Code 后再打开,上次没保存的内容不见了
这取决于 files.hotExit 和 files.restoreWindows 两个设置是否启用。它们控制的是“退出时是否暂存未保存内容”和“启动时是否还原上次窗口状态”,和 autoSave 无关。
-
files.hotExit设为onExitAndWindowClose(推荐),才能在关闭窗口或整个应用时保留未保存更改 -
files.restoreWindows决定启动时是否还原上次打开的文件夹/窗口:all(全部还原)、one(仅一个窗口)、none(不还原) - 如果使用多窗口,每个窗口的恢复状态是独立的;但若
hotExit是off,哪怕restoreWindows是all,未保存内容也早已丢弃 - 崩溃场景下,VS Code 依赖本地临时备份(位于
$HOME/Library/Application Support/Code/Backups或%APPDATA%\Code\Backups),此时hotExit必须为onExitAndWindowClose才会生成有效备份
哪些情况会导致自动保存与恢复失效
不是配置错了,而是某些操作或环境直接绕过机制。
- 通过命令行用
code --new或code --reuse-window启动时,可能跳过正常恢复流程 - 文件被外部程序修改(如 Git checkout、脚本覆盖),VS Code 默认会提示冲突,此时 autoSave 不会强行覆盖,需手动确认
- 远程开发(SSH / WSL / Containers)中,
hotExit依赖本地客户端保存状态,远程端崩溃后无法恢复未同步的更改 - 设置了
files.exclude或search.exclude掩盖了备份目录,可能导致恢复时找不到临时文件
真正起作用的从来不是单个配置,而是 files.autoSave + files.hotExit + files.restoreWindows 三者的组合逻辑。尤其要注意 hotExit 的值——设成 off 或 onExit(不包含 window close)时,关掉最后一个窗口就等于永久丢弃未保存内容。










