vscode 默认不保存折叠状态,需启用 "workbench.editor.restoreviewstate": true 且文件已保存、语言服务正常、无插件干扰才可持久化折叠。

VSCode 默认不保存折叠状态,必须手动开启配置
VSCode 关闭后默认会重置所有代码块的折叠状态,这不是 bug,是设计如此——它只持久化编辑器打开的文件列表和光标位置,folding 状态不在默认保存范围内。想让它“记住”折叠,得靠 "editor.foldingStrategy" 和 "workbench.editor.restoreViewState" 配合,但关键其实是后者是否启用。
-
"workbench.editor.restoreViewState"必须设为true(默认就是true,但某些旧版或被插件覆盖时可能失效) -
"editor.foldingStrategy"推荐保持"auto"(默认值),不要改成"indent",否则函数/类级折叠会丢失,只剩缩进折叠 - 仅对已保存的文件(即有真实路径、非
Untitled-1)生效;未保存的临时文件关闭即丢状态 - 多根工作区中,每个文件夹的折叠状态独立保存,不会跨文件夹混淆
折叠状态实际保存在哪儿?为什么有时“记不住”
VSCode 把每个文件的折叠信息存在本地 WorkspaceState 中,路径类似 $HOME/Library/Application Support/Code/Workspaces/<hash>/workspace.json</hash>(macOS)或 %APPDATA%\Code\Workspaces\<hash>\workspace.json</hash>(Windows)。不是存进文件本身,也不走 settings sync。
- 如果清过 VSCode 缓存(比如删了
Workspaces文件夹),折叠状态就全丢了 - 用命令行
code --disable-extensions启动时,部分折叠逻辑可能被禁用,导致状态不恢复 - 大文件(>5000 行)或启用了
"editor.folding": false的语言模式(如某些自定义语法高亮插件)会跳过折叠计算,自然也不存
哪些语言/场景下折叠容易“失灵”
不是所有折叠都受控于同一套机制。VSCode 的折叠分两层:编辑器内置的缩进折叠(indent-based)和语言服务器提供的语义折叠(semantic folding)。后者依赖 textDocument/foldingRange 响应,稳定性差一些。
- Python:用 Pylance 时折叠正常;但用旧版 Python 扩展或没装语言服务器,可能只保留缩进折叠,
def/class块无法记忆 - TypeScript/JavaScript:TS Server 正常时没问题;但若项目没配
tsconfig.json或 TS Server 崩溃,if/for块可能不折叠或不保存 - Markdown:
```代码块折叠由扩展提供(如 Markdown All in One),这类第三方折叠默认不持久化,关掉再开就展开 - JSON/YAML:内置支持好,但 JSON 中注释(非法但常见)会导致折叠解析失败,状态丢失
验证和快速修复步骤
别猜,直接查配置和日志。最准的方式是打开命令面板(Ctrl+Shift+P / Cmd+Shift+P),输 Developer: Toggle Developer Tools,切到 Console 标签,然后关再开一个已折叠的文件,看有没有报 folding 相关 warning。
- 检查设置:搜索
restore view state,确认"workbench.editor.restoreViewState"是勾选/true - 临时测试:关掉所有插件,只留默认功能,打开一个 .ts 文件,折叠几处,退出再重开,看是否恢复
- 强制刷新:删掉当前工作区目录下的
.vscode/workspace-state.json(如有),重启 VSCode 让它重建——旧损坏状态可能卡住新保存逻辑 - 避免快捷键误操作:
Ctrl+K Ctrl+0(全部展开)之后立刻关软件,下次打开就全是展开的,不是没记住,是最后状态就是展开











