根本原因是files.hotexit未生效或被覆盖,必须与window.restorewindows协同工作:files.hotexit设为"onexitandwindowclose"决定关时是否暂存,window.restorewindows设为"all"决定开时是否恢复未命名文件;二者缺一不可,且依赖正常退出流程。

为什么VSCode启动时不恢复未保存的文件
根本原因不是崩溃或配置丢失,而是files.hotExit没生效或被覆盖——它必须和window.restoreWindows协同工作,且依赖正常退出流程。强制杀进程、异常断电、或files.hotExit设为off时,VSCode压根不会写入恢复快照。
必须同时启用的两个核心设置
单独改其中一个几乎无效,它们是“存”和“取”的关系:
-
files.hotExit决定“关的时候要不要记下来”:推荐设为onExitAndWindowClose(不是默认的onExit),这样哪怕只关掉一个窗口,未保存内容也会暂存 -
window.restoreWindows决定“开的时候要不要拿出来”:必须设为all(不是folders),否则未命名的Untitled-1或临时粘贴的代码片段直接被过滤掉 - 两者都要写进
settings.json,避免被插件或远程开发配置覆盖:{ "files.hotExit": "onExitAndWindowClose", "window.restoreWindows": "all" }
备份目录里手动捞草稿的实操要点
当设置正确但你还是手滑点了“不保存”关掉窗口,或遭遇崩溃,就得去Backups目录翻原始二进制快照:
- 路径必须精准:
%APPDATA%\Code\Backups\(Windows)、~/Library/Application Support/Code/Backups/(macOS)、~/.config/Code/Backups/(Linux) - 进到某个哈希命名的子目录后,直接用 VSCode 打开
file_0、file_1这类文件——别指望看到原文件名,内容可读就是对的 - 打开后务必执行
File: Save As并手动补上扩展名(如.js),否则保存的是无类型纯文本,语法高亮和语言功能全失效 - 注意:空白
Untitled标签如果全程没输入任何字符,VSCode不会为其生成备份文件
容易被忽略的系统级干扰
即使设置全对,某些环境会静默禁用恢复逻辑:
- GNOME Wayland 或部分 Linux 桌面环境会拦截
hotExit信号,需在终端中运行code --enable-proposed-api测试是否恢复正常 - SSH 远程连接时,
Backups目录实际落在远端服务器上,本地重启 VSCode 客户端毫无意义 - 企业策略组(GPO)或 IT 管理工具可能强制将
files.hotExit重置为off,此时检查settings.json里该行是否被加了//注释或显示为灰色
真正麻烦的不是找不到开关,而是恢复行为本身依赖于“上次退出是干净的”——如果经常用任务管理器杀进程,VSCode 会逐步降级缓存策略,最终连Backups目录都不再写入。











