vscode 启动时自动恢复上次会话需确保 files.restorewindows 设为 all/one、文件已保存、正常退出程序,且无扩展干扰或备份目录损坏。

VSCode 启动时自动恢复上次会话
VSCode 默认就能记住关闭前打开的文件和编辑器状态,但前提是没禁用或干扰这个机制。核心开关是 workbench.startupEditor 和 files.restoreWindows,后者才是控制“是否恢复窗口”的关键。
-
files.restoreWindows设为all(默认值):关掉所有窗口后重启,会还原全部窗口及其中的标签页 - 设为
one:只恢复最后一个关闭的窗口 - 设为
none:完全不恢复,每次都是空窗口 - 如果手动执行了
Developer: Reload Window或启用了某些插件(比如“Auto Close Tag”旧版有 bug),可能意外清空会话缓存
光标位置和滚动偏移没被记住?检查文件关联设置
VSCode 能记光标位置和滚动条位置,但仅限于已保存的文件。对未保存的临时文件(Untitled-1)、粘贴生成的无路径内容、或通过命令行用 code -r 强制复用窗口打开的文件,这些位置信息不会持久化。
- 确保文件已保存(哪怕只是
Ctrl+S一下),否则光标位置只保留在当前会话内 -
editor.scrollBeyondLastLine和editor.smoothScrolling不影响位置记忆,但开启editor.stickyScroll.enabled可能导致滚动锚点轻微偏移,属正常渲染行为 - 远程开发(SSH/WSL)下,若工作区路径映射不稳定,也可能丢掉位置记录——此时看状态栏右下角的
Remote标识是否持续在线
多窗口场景下部分窗口消失?别乱点「退出」
macOS 和 Windows 对“关闭窗口”和“退出应用”的处理逻辑不同,这是最常被忽略的坑。
- macOS 上按
Cmd+Q或从 Dock 右键选「退出」,会真正退出进程,此时所有窗口状态才写入磁盘缓存;而只关窗口(Cmd+W)不退出,下次启动仍能恢复 - Windows 上点击窗口右上角 × 是关闭窗口,不是退出程序;必须右键任务栏图标选「关闭窗口」或结束
Code.exe进程,才能触发完整会话保存 - 如果开了多个 VSCode 窗口但属于不同工作区(比如一个开文件夹,一个开单个文件),它们各自独立保存状态,不会互相覆盖
还是打不开?优先排查扩展和用户数据损坏
当设置都对却仍无法恢复,大概率是会话元数据损坏,而不是配置问题。
- 先试禁用所有扩展:启动时加
--disable-extensions参数,如code --disable-extensions - 检查
~/.vscode/Backups(Linux/macOS)或%APPDATA%\Code\Backups(Windows)目录是否存在且可读写;若该目录为空或时间戳异常陈旧,说明写入失败 - 不要手动删
Backups目录——VSCode 会在下次正常退出时重建,但删了会导致本次会话彻底丢失 - 极少数情况是
storage.json损坏,可尝试重命名~/.vscode/User/globalStorage下的对应文件夹(风险较高,仅调试用)
会话恢复依赖的是退出时的干净写入,不是启动时的主动加载。只要没强制杀进程、没磁盘满、没权限问题,它就该工作——但一旦中间断过电或崩溃过一次,那个时间点之后的状态就再也找不回来了。











