vscode 启动时不默认恢复文件夹展开状态,唯一可靠方案是安装插件 restore tree state;该插件自动记录并还原资源管理器中所有展开节点,存储于 workspacestorage 中,不污染项目配置。

VSCode 启动时默认折叠工作区根目录
VSCode 默认不会记住文件资源管理器中文件夹的展开状态,哪怕你上次关闭前手动展开了 src/components,重启后整个树又缩回最顶层。这不是 bug,是设计使然——它只持久化「打开的编辑器标签」和「活动文件」,不保存折叠/展开状态。
真正起作用的是 workbench.tree.expandMode 配置项,但它控制的是「新展开行为」,不是「恢复上次状态」。所以别指望改这个就能解决问题。
唯一可靠方案:用 workbench.tree.expandMode + 手动触发一次展开
VSCode 本身不提供自动还原折叠状态的功能,但可以靠「首次加载时主动展开常用路径」来模拟效果。关键是让 VSCode 在打开项目后,立刻执行一次对目标文件夹的展开操作。
-
workbench.tree.expandMode设为"singleClick"或"doubleClick"(推荐前者),避免误点收起 - 在项目根目录下放一个空的
.vscode/settings.json,写入:{ "workbench.tree.expandMode": "singleClick" } - 真正生效靠的是「用户手动双击过某文件夹」——VSCode 会把最近点击过的路径记在
WorkspaceStorage里;下次启动时,只要该路径仍存在,它会自动尝试展开到那一层 - 所以建议每次关 VSCode 前,手动双击进入你最常工作的子目录(比如
src或pages),而不是只打开文件
插件方案:只有 Restore Tree State 真正管用
搜 “vscode restore folder expand” 会出现一堆插件,但多数已弃更或只存档编辑器标签。目前唯一持续维护、且专注解决这个问题的是 Restore Tree State(作者:Romain Lancien)。
- 安装后无需配置,默认开启,会自动记录并恢复资源管理器中所有展开节点
- 它把状态存在
WorkspaceStorage/<workspace-id>/state.vscdb</workspace-id>里,不是 JSON 配置,所以不污染项目 - 注意:如果启用了多根工作区(multi-root workspace),它只对当前激活的根生效
- 常见失效场景:
.gitignore里排除了.vscode,导致插件配置没被读取;或者 workspace 路径含特殊字符(如空格、中文),某些旧版插件解析失败
为什么不能靠 files.autoSave 或 workbench.startupEditor?
这两个配置常被误认为相关,但它们完全不碰文件树状态。
-
files.autoSave只控制文件内容是否自动写入磁盘,和 UI 展开无关 -
workbench.startupEditor决定启动时显示什么编辑器(welcome page / last editor / none),不影响资源管理器 - 试图用
explorer.autoReveal搞事情也不行——它只在「打开某个文件时」自动滚动并高亮该文件所在位置,不会展开父级目录 - 真正的状态存储机制藏在 VSCode 的底层 session 数据中,普通配置项无法触达
复杂点在于:这个状态不是纯前端可读写的,它依赖 VSCode 主进程的 workspace service 初始化时机。插件能生效,是因为它 hook 了 onDidRegisterTreeDataProvider 这类底层事件,普通用户配置做不到这一步。











