VSCode默认不保存折叠状态,关闭文件后重新打开会全部展开;可靠方案是安装扩展如Restore Folding State,内置设置editor.restoreViewState仅在同工作区同实例内有效且受语言模式、文件大小和折叠策略限制。

折叠状态不会自动保存,关文件再打开就全展开了
VSCode 默认不保留折叠状态,哪怕你手动折了 20 个函数,关闭文件再重新打开,全部恢复展开。这不是 bug,是设计行为——折叠被视为临时视图操作,不写入文件或会话状态。
解决办法只有两个方向:
- 装扩展,比如
Customize UI或Fold Level(注意:后者已停更,推荐用Restore Folding State) - 启用 VSCode 内置的
editor.restoreViewState设置(但仅对部分语言和场景生效)
关键点:这个设置只在「同一工作区、同一编辑器实例内」切换标签页时起作用;一旦关闭窗口或重启 VSCode,依然丢失。真正可靠的方案还是靠扩展。
editor.restoreViewState 开了也不管用?检查这三点
即使设置了 "editor.restoreViewState": true,仍可能无效。常见原因:
- 当前文件没被识别为对应语言模式(右下角显示
Plain Text而不是JavaScript),折叠信息根本没被记录 - 文件过大(>5MB)或含大量嵌套结构,VSCode 主动放弃保存折叠状态以保性能
- 使用了
foldingStrategy: "indentation",此时折叠依赖实时缩进计算,而非 AST 节点,无法可靠还原
验证方式:打开命令面板(Cmd+Shift+P / Ctrl+Shift+P),运行 Developer: Toggle Developer Tools,在 Console 里输入 vscode.workspace.getConfiguration().get('editor.restoreViewState') 确认值为 true。
自定义折叠区域(#region)的展开记忆更脆弱
用 // #region 手动标记的折叠块,比语法级折叠(如函数、类)更容易丢失状态。因为这类区域依赖注释解析器,而 VSCode 不把它当作“稳定 AST 节点”来持久化。
实操建议:
- 避免在大型配置文件(如
webpack.config.js)里重度依赖#region折叠,改用真实模块拆分 - 如果必须用,确保语言扩展已加载(例如 JS 文件不能是
JSON模式打开) - 别嵌套超过 3 层
#region,深度越大,恢复概率越低
一个容易被忽略的事实:VSCode 只在首次打开文件时尝试还原折叠状态;后续手动折叠/展开操作,不会触发“重存”。所以第一次打开时的状态,就是它能记住的全部。


















