VSCode启动时自动恢复上次工作区需同时配置files.hotExit为onExitAndWindowClose和window.restoreWindows为all或folders;macOS用户须用Cmd+Q彻底退出进程,而非仅关闭窗口。

VSCode 启动时自动恢复上次工作区
默认情况下 VSCode 不会自动打开上次关闭时的文件或文件夹,除非你明确配置了工作区恢复行为。关键在 files.hotExit 和 window.restoreWindows 两个设置,它们控制「关机/崩溃后能否恢复」和「启动时恢复什么」。
常见错误是只改了 files.hotExit 却没配 window.restoreWindows,结果关掉窗口再开,桌面空荡荡——不是没保存,是根本没告诉 VSCode「该恢复窗口」。
-
files.hotExit设为onExitAndWindowClose(推荐),确保退出时缓存未保存的编辑状态 -
window.restoreWindows必须设为all或folders;设成none就永远不恢复,哪怕其他设置全开也没用 - 如果用的是多根工作区(.code-workspace 文件),确保关闭前是以工作区方式打开的,而不是单独拖入文件夹
Mac 上 VSCode 关闭窗口 ≠ 退出进程,导致恢复失效
macOS 用户最容易踩的坑:点红叉关闭窗口后,VSCode 进程还在后台运行(菜单栏图标仍亮着)。下次点击 Dock 图标,它只是唤起已有窗口,不会触发「启动恢复逻辑」,所以看起来像没记住。
真正退出必须用 Cmd + Q,或者右键 Dock 图标选「退出」。否则 window.restoreWindows 根本不生效——它只在「进程冷启动」时起作用。
- 验证是否真退出:活动监视器里搜
Code,进程不存在才算 - 习惯性点红叉的同学,可以去
Code > Settings > Window把window.closeWhenEmpty设为true,让空窗口自动退出进程 - 终端启动时加
--no-sandbox等参数可能干扰恢复,普通使用别乱加
项目级记忆:用 .code-workspace 替代单文件夹打开
只打开一个文件夹时,VSCode 记住的是「那个路径」;但如果你有多个相关目录(比如前端+后端)、需要固定扩展、调试配置或文件排除规则,光靠路径记忆远远不够——这时得用工作区文件。
工作区文件本质是 JSON,它把多个文件夹、设置、任务都固化下来,VSCode 启动时按这个「快照」还原,比单纯记路径可靠得多。
- 通过
File > Save Workspace As...生成my-project.code-workspace - 之后始终用双击这个文件启动,或命令行执行
code my-project.code-workspace - 别手动改工作区文件里的
folders路径,要用 VSCode 的Add Folder to Workspace功能,否则相对路径或符号链接容易出错
插件或远程开发会覆盖本地恢复逻辑
装了 Remote - SSH、Dev Containers 或 WSL 扩展后,VSCode 启动时优先尝试连接远程环境,本地的窗口恢复会被跳过。现象是:本地设置全对,但一开就进空白远程窗口,或者卡在连接界面。
这不是 bug,是设计如此——远程会话有自己的生命周期管理,本地恢复被主动让位了。
- 想临时用本地恢复,启动时加
--disable-extensions参数测试,确认是否插件干扰 - 远程场景下,真正的「记忆」发生在远程服务器侧,比如 SSH 主机上的
~/.vscode-server缓存,和本地设置无关 - 如果常在本地/远程间切换,建议为不同场景建不同快捷方式:一个带
--disable-extensions,一个不带
恢复逻辑本身不复杂,但 VSCode 在「进程生命周期」「工作区抽象」「远程代理」三层之间做了取舍。真正容易被忽略的,是 macOS 下「窗口关闭」和「进程退出」的语义差异——这点没理清,调一百遍设置都没用。


















