VSCode缩进折叠需满足三前提:语言ID正确(如json非jsonc)、无扩展劫持、editor.foldEnable为true;推荐按语言配置foldingStrategy,注意缩进须严格对齐。

VSCode 默认按语法折叠,想改用缩进折叠,只需改一个设置项:editor.foldingStrategy,值设为 "indentation" 即可生效;但别直接全局硬切,否则 JS/TS 里函数名点击收起会失效。
为什么改了 editor.foldingStrategy 还是不按缩进折叠
常见不是配置写错了,而是两个前提没满足:
- 当前文件的语言模式(language ID)不对——右下角显示的是
Plain Text或JSONC而非json,editor.foldingStrategy就不会被该语言读取 - 有扩展劫持了折叠逻辑,比如某些旧版 Prettier 或自定义语言插件会忽略你的设置,临时禁用后重开文件可验证
-
editor.foldEnable被设为false(尤其在团队共享的.vscode/settings.json里),整个折叠功能就静默关闭了
按语言精准控制:只对 JSON/YAML/Markdown 用缩进折叠
全局设 "indentation" 会让 JavaScript 的 function 块失去语义折叠(点函数名不能一键收起函数体),推荐用语言专属配置:
{
"[json]": { "editor.foldingStrategy": "indentation" },
"[yaml]": { "editor.foldingStrategy": "indentation" },
"[markdown]": { "editor.foldingStrategy": "indentation" },
"[python]": { "editor.foldingStrategy": "indentation" }
}
注意:[json] 和 [jsonc] 是不同 language ID,如果文件是 .jsonc,得单独加一行 "[jsonc]": { ... };[html] 即使设了 indentation 也大概率回退到语法折叠——这是内置解析器强制行为,不是配置失败。
Ctrl+Shift+[ 没反应?先看光标落在哪一行
这个快捷键不是“按了就折”,它从光标所在行向上找最近的可折叠锚点:
- 必须落在
function、if、class、{、def所在行,或 Python 中缩进首行;落在空行、注释行、字符串内,直接无效 - JSX 的
{}内联表达式原生不识别,需装支持 foldingProvider 的插件(如JavaScript and TypeScript Nightly) - 鼠标悬停行号左侧出现 ▶ 图标,才是 VSCode 已识别出可折叠结构;没图标就别按快捷键,先查语言模式和策略
最易被忽略的一点:缩进折叠依赖空格/TAB 严格对齐。Python 里混用空格和 TAB、YAML 里多了一个空格,都会导致某一层级无法折叠——它数的是物理缩进,不是语义作用域。


















