不,默认不持久化;VSCode折叠状态为会话级,关闭文件或重启后丢失,需显式启用"editor.foldingPersistence": true并确保文件已保存、路径稳定、语言服务就绪,方可恢复折叠状态。

折叠状态是否默认持久化?
不,默认不保存。VSCode 的代码折叠状态是会话级的,关闭文件或重启编辑器后,所有手动折叠/展开操作都会丢失——除非你主动启用并配置了持久化机制。
如何让折叠状态在重启后保留
关键在于启用 editor.foldingPersistence 设置,它控制折叠状态是否写入 workspace 状态数据库(state.vscdb)。该选项默认为 false,需显式开启:
- 打开设置(
Ctrl + ,),搜索foldingPersistence,勾选Editor > Folding: Persistence - 或直接在
settings.json中添加:"editor.foldingPersistence": true
- 注意:该设置只对已保存的文件生效;未保存的临时文件(如
Untitled-1)不会持久化折叠状态 - 重启 VSCode 后,同一工作区下相同路径的文件会恢复上次退出前的折叠状态(包括手动折叠的
#region块和语法折叠)
为什么有些折叠没被记住?常见原因
即使开启了 editor.foldingPersistence,仍可能失效,主要因以下几点:
-
editor.foldingStrategy设为indentation时,折叠范围依赖实时缩进计算,而缩进易受空格/Tab混用、格式化工具干扰,导致恢复时边界偏移 - 语言服务器未就绪(如 TS/JS 项目刚打开、LSP 还在初始化),
FoldingRange请求失败,VSCode 回退到基于缩进的临时折叠,这部分状态不参与持久化 - 文件被外部程序修改(如 git checkout、自动格式化脚本),触发 VSCode 重新解析 AST,旧折叠状态被丢弃
- 工作区 ID 变更(例如重命名文件夹、移动项目位置),导致
workspaceStorage/<workspace-id>目录失效,state.vscdb中对应记录无法匹配
折叠状态实际存在哪?怎么验证
VSCode 将折叠状态和其他编辑器状态一起存入 SQLite 数据库:~/Library/Application Support/Code/User/workspaceStorage/<workspace-id>/state.vscdb(macOS),Windows 对应 %APPDATA%\Code\User\workspaceStorage\...。
- 可用命令行工具
sqlite3 state.vscdb ".tables"查看表结构,折叠状态通常存于ItemTable或StateTable中,键名类似editor.folding.<file-uri-hash> - 若想调试,可临时关闭 VSCode,删掉该
state.vscdb,再启动——所有折叠状态清零,是验证持久化是否起效的最直接方式 - 插件无法直接读取该数据库;如需跨会话同步折叠逻辑,应改用
workspaceStateAPI 存储自定义标记(如用户手动标记的区域 ID 列表)
// #region 显式标记,再配合 editor.foldingPersistence: true,而不是依赖自动识别的折叠。


















