必须将 editor.folding 设为 true 才能启用折叠功能,否则折叠图标、快捷键和 #region 均失效;其生效还依赖语言扩展是否提供 foldingProvider、语言模式正确及对应折叠策略设为 auto。

editor.folding 必须设为 true 才能启用折叠功能
VSCode 默认开启折叠,但一旦被手动关掉或被某些扩展覆盖,editor.folding 就会变成 false,此时所有折叠图标、快捷键、#region 都完全失效——而且 VSCode 不提示、不报错,只静默隐藏。
打开 settings.json(Ctrl+Shift+P → Preferences: Open Settings (JSON)),确认存在且值为 true 的这两项:
"editor.folding": true-
"editor.showFoldingControls": "mouseover"(推荐)或"always"
如果缺失或设为 false,补上并保存,否则后续所有配置都白搭。
#region 折叠不是全局开关,得看语言扩展是否认它
VSCode 原生支持 // #region 和 #region,但**是否生效取决于当前语言扩展是否提供 foldingProvider**。比如 Python 官方扩展默认支持,但若你禁用了 Pylance 或把文件识别成 Plain Text,#region 就直接被忽略。
检查右下角语言标识是否正确(如 .py 文件显示 Python,不是 Plain Text);再确认对应语言设置中没禁用折叠策略:
- JavaScript/TypeScript:
"javascript.foldingStrategy": "auto"(不能是indentation) - Python:
"python.foldingStrategy": "auto"(indentation模式下#region无效) - C#:
"csharp.foldingStrategy": "auto"
写法也必须严格:JS/TS 是 // #region 描述(两个斜杠 + 空格 + #region);Python/C# 是 #region 描述(一个井号紧贴 region,不能多空格或斜杠)。
全局启用 #region 折叠?其实没有“全局启用”这回事
VSCode 不提供“一键让所有语言都支持 #region”的开关。所谓“全局”,只是你在 settings.json 里统一配了多个语言块,例如:
"[javascript]": {
"editor.foldingStrategy": "auto"
},
"[typescript]": {
"editor.foldingStrategy": "auto"
},
"[python]": {
"editor.foldingStrategy": "auto"
}
但注意:这不等于“启用 #region”,只是确保语言扩展有机会处理它。真正起作用的是语言服务本身,不是设置项。
如果你在某个语言里写了 // #region 却没反应,优先排查三点:editor.folding 是否为 true、语言模式是否正确、对应扩展是否运行正常(比如 TypeScript Server 是否就绪)。
折叠状态不会跨会话保留,别指望自动记住
VSCode 默认不保存折叠状态。关掉文件再打开,所有代码都是展开的;重启编辑器,之前折好的区域全恢复原样。这不是 bug,是设计如此。
目前没有稳定可靠的内置方式让它“记住上次折叠状态”。第三方扩展如 ExpandRegion 或 Region Folder 可以增强行为,但它们不改变这个底层事实:VSCode 的折叠是视图态(view-state),不是文档态(document-state)。
所以别花时间找“全局记忆折叠”的配置项——它不存在。真要长期组织大文件,靠 #region + 合理分块 + 语言模式校准,比依赖自动记忆更可靠。











