vscode 默认不保存代码折叠状态,每次打开文件均恢复全展开;需依赖插件(如 restore code folding)或手动 #region 标记配合缩进策略实现状态恢复。

折叠状态默认不保存,每次打开都是全展开
VSCode 默认不会记住你上次折叠了哪些区域——哪怕你刚手动折完一整个文件,关掉再打开,所有代码块都恢复展开。这不是 bug,是设计如此。它只保存编辑器视图位置、光标、选区等状态,折叠层级不在持久化范围内。
常见错误现象:写完一段逻辑后把无关函数全折起来,第二天打开发现又得重来一遍;或者多人协作时,别人提交的文件在你本地一打开就“炸开”成满屏代码。
- 语言扩展(如
Pylance、rust-analyzer)也不会改变这一行为,它们只影响“哪些块能被折叠”,不负责“记住了没” -
editor.restoreViewState这个设置对折叠无效,它只管光标位置、滚动偏移、已打开的编辑器标签页等 - 即使你用了
#region标记,只要没额外插件,折叠状态依然不保留
想让折叠状态自动恢复?得靠插件或配置组合
原生 VSCode 不支持,但有两个可靠路径可实现:
- 装
Restore Code Folding插件(作者:grimmer),它会在文件保存时把当前折叠状态序列化到.vscode/folding-state.json,下次打开自动还原;注意:它只对当前工作区生效,且需开启"restoreCodeFolding.enabled": true - 改用
settings.json中的"editor.foldingStrategy": "indentation"+ 手动#region—— 虽然仍不记忆状态,但能保证每次打开时至少结构清晰、可预测;尤其适合 Python 或 Markdown 这类缩进敏感语言 - 别指望
files.autoSave或workbench.editor.restoreViewState能起作用,它们和折叠状态完全无关
为什么官方不加这个功能?背后有兼容性顾虑
折叠状态依赖语言服务实时解析结果,而不同扩展在启动时加载顺序、响应速度、甚至语法树生成时机都可能不同。比如你打开一个 TypeScript 文件,typescript-language-server 没 ready 前,VSCode 无法确认哪些 {} 是函数体、哪些是对象字面量——此时强行恢复旧折叠状态,很可能错位或崩溃。
所以 VSCode 选择保守策略:只在语言服务稳定后才允许折叠操作,也不存状态。这导致:
- 某些插件(如
Vetur对 Vue SFC 的折叠支持)在热更新后会丢掉之前折叠状态,不是你操作问题,是服务重载了 - 大文件首次打开时,折叠图标延迟出现,此时按
Ctrl+K Ctrl+0可能只折了一半——等几秒再试更稳 - 如果发现折叠状态“偶尔恢复”,大概率是某个插件在后台偷偷做了缓存,而非 VSCode 自身行为
临时替代方案:用命令快速回到上次折叠节奏
没法记状态,但可以缩短重建成本:
- 把常用操作绑定快捷键:
editor.foldAll绑到Ctrl+Alt+F,editor.unfoldAll绑到Ctrl+Alt+U,比默认组合键更顺手 - 在
keybindings.json里加一条:{"key":"ctrl+alt+1","command":"editor.foldLevel","args":1,"when":"editorTextFocus"},一键折到第一层,比逐级按Ctrl+K Ctrl+1少两步 - 对关键文件,提前用
// #region划出主干模块,哪怕不记状态,也能靠标记快速定位并手动折——比纯语法折叠更可控











