vscode关闭后折叠状态丢失是设计使然,因无内置配置保存折叠状态;需借助auto fold或fold plus等扩展实现持久化记忆,editor.foldingstrategy设置不影响保存但影响还原准确性。

VSCode关掉再打开,折叠状态全丢了怎么办
VSCode 默认不保存任何文件的折叠状态——窗口一关,所有手动收起的函数、类、块全恢复展开。这不是 bug,是设计如此。没有内置配置项能“记住上次怎么折的”,workbench.explorer.autoReveal 或 explorer.compactFolders 都不干预这个行为。
哪些扩展能真正持久化折叠状态
靠原生设置无解,必须借助扩展。实测稳定可用的只有两个:
- Auto Fold:轻量,只存当前文件折叠位置,重启后自动还原;但不支持多光标/多编辑器同步,且对 JSX 内联表达式等非标准结构无效
-
Fold Plus:更底层,通过监听
onDidChangeTextDocument捕获折叠动作,把状态写入 workspace 级缓存;支持跨窗口恢复,但会略微拖慢大文件(>10k 行)的打开速度
别装 “Fold All on Startup” 类扩展——它们只是启动时执行一次 Fold All 命令,并不记忆你上次折了哪几处。
editor.foldingStrategy: "indentation" 会影响状态记忆吗
不会。这个配置只改变折叠识别方式(比如让 Python 按缩进而非 AST 折),和状态是否保存完全无关。但它会间接影响记忆可靠性:
- 设为
indentation后,折叠边界由空格/Tab 数决定,如果某段代码缩进不一致(比如混用空格和 Tab),扩展可能在还原时错位收起 - 设为
auto(默认)时,语言服务器提供 AST 边界,还原更准,但部分语言(如旧版 TypeScript)AST 不稳定,反而导致折叠跳变
建议 Python/Go 项目用 indentation,JS/TS 项目保持 auto,再配 Fold Plus。
为什么自定义#region 折叠区重启后经常失效
因为 region 注释(如 // #region / // #endregion)的折叠依赖语言扩展主动注册 provider。常见失效原因:
- 文件语言模式错误:右下角显示
Plain Text而非JavaScript,region 注释直接被忽略 - 扩展未激活:TypeScript 官方扩展禁用了 region 支持(需手动开启
typescript.preferences.includePackageJsonAutoImports无效,真正要开的是javascript.suggest.autoImports?错——应检查editor.foldingImports是否为 true) - 注释格式不标准:VSCode 只认
// #region和/* #region */,// region(少#)或//region(无空格)都不触发
region 折叠本身可被扩展记忆,但前提是它得先被正确识别出来——否则连“折过”这件事都不会被记录。
真正麻烦的不是记不住,而是记错了:比如你折了 3 个函数,结果扩展还原时把第 2 个和第 4 个一起折了。这种错位往往源于文件被外部工具修改(如 prettier 格式化后缩进变动),或扩展缓存损坏。遇到这种情况,删掉 .vscode/fold-cache.json(如果存在)比重装扩展更快。











