VSCode默认能记住上次状态,但需满足三条件:进程真正退出、window.restoreWindows设为all或folders、文件已保存或启用files.hotExit;否则重启为空。

VSCode 默认就能记住上次打开的文件和窗口,但“记住”只在满足三个硬性条件时生效:进程真正退出、window.restoreWindows 设为 all 或 folders、文件已保存(或启用了 files.hotExit)。
为什么关掉窗口后重启还是空的?查 window.restoreWindows 和退出方式
这是最常被忽略的组合问题:设置对了,但没真正退出进程;或者进程退出了,但设置是 none。
-
window.restoreWindows必须是all(恢复全部窗口+标签页)或folders(只恢复已打开的文件夹/工作区),设成none就永远不恢复 - macOS 上点红叉(
Cmd+W)只是关窗,VSCode 进程仍在后台运行;必须按Cmd+Q或右键 Dock 图标选「退出」,才能触发状态写入 - Windows 上点击窗口右上角 × 是关窗,不是退出程序;要彻底退出,得右键任务栏图标 →「关闭窗口」,或在任务管理器里结束
Code.exe进程 - 验证是否真退出:macOS 打开「活动监视器」搜
Code,Windows 打开「任务管理器」搜Code,进程不存在才算
files.hotExit 决定未保存内容能不能回来
光标位置、滚动偏移、甚至 Untitled 文件里的代码,能否在重启后出现,全看这个开关。
- 设为
onExitAndWindowClose:关掉单个窗口或整个进程时,都会暂存未保存的编辑状态 - 设为
onExit(默认):只有整个进程退出时才保存,关一个窗口就丢 - 未保存的文件(如
Untitled-1)不会记光标位置——必须先Ctrl+S保存一次,哪怕只是临时路径 - 命令行用
code -r打开文件,不会触发 hotExit 缓存;它复用窗口,但不参与会话快照写入
终端、光标、滚动位置为什么没恢复?这些细节不归 VSCode 管
VSCode 的恢复机制有明确边界,别指望它包揽一切。
- 终端内容(命令历史、输出)完全不恢复:
window.restoreWindows只能还原「终端面板是否打开」,里面敲过什么、输出过什么,全靠 shell 自己记(比如zsh的HISTFILE) - 光标和滚动位置只对已保存的文件有效;粘贴进来的无路径内容、通过
code --goto打开的临时文件,都不会持久化位置 -
editor.stickyScroll.enabled开启时,滚动锚点可能轻微偏移,这是渲染行为,不是恢复失败 - 远程开发(SSH/WSL)下路径映射不稳定,或状态栏右下角 Remote 标识断连,会导致位置记录丢失
多窗口、工作区、命令行启动时恢复失效?优先关掉 window.openFilesInNewWindow
这个设置表面管“双击文件怎么开”,实际深度干扰恢复逻辑。
- 设为
on:每个拖入的文件都新开窗口 → VSCode 只完整记录最后一个关闭的窗口,其余丢失 - 设为
off:所有文件都在同一窗口打开 →window.restoreWindows: all才能稳定还原全部标签页 - 命令行启动默认新建窗口:
code my-project必定绕过恢复;必须加-r(即--reuse-window)才尊重当前配置 - 打开
.code-workspace文件时,VSCode 会以该工作区为最高优先级启动,覆盖普通文件夹的恢复行为;想恢复自由态编辑记录,请确保退出前没激活任何工作区
真正难搞的不是设置本身,而是 macOS/Windows 对「退出」的定义差异、多窗口与工作区的优先级冲突、以及那些看似无关实则劫持启动流程的扩展(比如 vscode-startpage)。一旦出问题,先用 code --disable-extensions 启动测试,再检查 Backups 目录时间戳是否更新——状态文件没写入,调再多次设置也没用。


















