VSCode没有“自动折叠”开关,所谓“自动”实为正确配置foldingStrategy、语言扩展及#region标记规则共同触发;开箱即用仅对function/class等语法块生效,其余需手动调整或安装扩展。

VSCode 没有“自动折叠”开关——所谓“自动”,其实是靠正确配置 foldingStrategy、语言扩展和标记规则共同触发的折叠行为。开箱即用的折叠只对部分语法块生效,其余得手动调或装扩展。
为什么光标在函数里却没出现 ▶ 折叠图标
折叠控件消失,大概率是 editor.showFoldingControls 被设成了 "never",或 editor.folding 被关掉了。VSCode 不会报错,只会静默隐藏所有折叠按钮。
- 打开
settings.json(Ctrl+Shift+P → Preferences: Open Settings (JSON)),确认存在且为 true: "editor.folding": true-
"editor.showFoldingControls": "mouseover"(推荐,省空间;"always"适合常手动选区折叠) - 检查右下角语言标识:比如
.py文件显示的是Python,不是Plain Text;.jsonc应为JSON with Comments - 某些格式化扩展(如旧版 Prettier)会干扰折叠渲染,可临时禁用验证测试
如何让 JSON/YAML/Markdown 按缩进折叠
这些语言没有 {} 或 def 这类语法锚点,"auto" 策略基本失效。必须强制切到 "indentation" 模式,VSCode 才会老老实实数空格/TAB 层级。
- 全局设(慎用):
"editor.foldingStrategy": "indentation" - 更推荐按语言精准控制,在
settings.json中加: "[json]": { "editor.foldingStrategy": "indentation" }"[yaml]": { "editor.foldingStrategy": "indentation" }"[markdown]": { "editor.foldingStrategy": "indentation" }- 注意:
HTML/CSS即使设了indentation,也可能回退到语法折叠——这是内置解析器优先级更高,不是配置错了
// #region 折叠写了却不生效?检查这几点
VSCode 原生支持 #region,但只认「单行注释开头 + 紧跟 region」的写法,不同语言规则不同。写错一个空格、多一个斜杠、缩进不一致,就直接忽略。
- JavaScript/TypeScript 正确写法:
// #region API handlers(两个斜杠 + 空格 +#region) - Python/C# 正确写法:
#region utils(一个井号 + 紧跟region,不能写成# #region) -
#endregion必须和#region处于同一缩进层级,否则无法闭合 - 确保对应语言扩展已启用:比如 Python 需官方扩展 +
python.foldingStrategy设为"auto";JS/TS 需 TypeScript Server 正常工作 -
"auto"是前提:"indentation"模式下// #region完全不识别
连续空行能自动收起来吗?不能,但可以模拟
VSCode 内置不支持空行自动折叠。editor.foldingStrategy 控制的是语法级折叠,设成 "indent" 或 "auto" 都不会让连续空行自动收起。
- 必须先设
"editor.showFoldingControls": "always",才能在行号旁看到折叠箭头 - 然后手动选中若干空行(比如 3 行),按
Ctrl+Shift+[(Windows/Linux)或Cmd+Shift+[(macOS)折叠 - 想“默认收起”?只能靠扩展,比如
Auto Fold(作者:Aidan W.) - 安装后配置示例(加到
settings.json):"auto-fold.rules": [ { "begin": "^\s*$", "end": "^\s*$" } ] - 注意:大文件(>5000 行)可能卡顿;若同时开了其他折叠扩展(如
indent-rainbow),可能冲突导致箭头错位
真正容易被忽略的是:折叠状态不会跨会话保存,每次打开文件都是初始展开;如果需要记忆上次折叠位置,得靠插件(如 Restore Folding)或手动执行 Ctrl+K Ctrl+0 再 Ctrl+K Ctrl+J 快速复位。


















