Ctrl+K Ctrl+0(Win/Linux)或Cmd+K Cmd+0(macOS)是VSCode一键折叠所有可识别结构(含函数体、类、if块等)的快捷键,但需满足文件已保存、语言模式正确、foldingStrategy为auto且语言扩展正常启用等前提。

Ctrl+K Ctrl+0 是折叠所有函数体的可靠入口
直接按 Ctrl+K 松开,再按 Ctrl+0(Windows/Linux),或 Cmd+K → Cmd+0(macOS),就能把当前文件里所有函数体、类定义、if 块、#region 区域一次性收起,只留声明行。
这不是“猜函数”,而是依赖语言扩展提供的 foldingProvider 识别出的可折叠结构。JavaScript/TypeScript/Python/Java 等主流语言默认支持,前提是:
- 文件已保存(未保存的临时文件可能不触发语法解析)
- 右下角状态栏显示正确语言模式(比如是
JavaScript,不是Plain Text) - 函数写法规范:Python 需标准缩进,JS/TS 需成对大括号,箭头函数若无大括号则不被识别为可折叠单元
常见失效场景:JSX 中嵌套过深、Python 单行 if、TypeScript 类型声明后紧跟函数但无空行——这些都可能让折叠引擎漏掉目标。
Ctrl+K Ctrl+J 展开的是“已折叠项”,不是“全部原始结构”
Ctrl+K Ctrl+J(或 Cmd+K Cmd+J)执行的是 editor.unfoldAll,它只展开当前已被折叠的区域,不会还原那些本来就没被折叠的代码块。
这意味着:
- 如果你之前用
Ctrl+Shift+[手动折了 3 个函数,再按Ctrl+K Ctrl+J,就只展开这 3 个 - 如果整个文件从未折叠过,按了也无反应——它不“展开未折叠内容”
- 光标必须在编辑器内(不能聚焦在搜索框或侧边栏),否则命令不生效
别把它当成“重置折叠状态”的按钮,它只是反向操作已发生的折叠动作。
别指望 editor.foldLevel2 精准控制“函数内部”
editor.foldLevel2 的本质是“折叠所有嵌套深度为 2 的节点”,不是“函数体内部逻辑”。在 JS 里,一个 function 是 Level 1,它里面的 if 是 Level 2,if 里的 for 就是 Level 3;在 Python 里,它按缩进级数匹配,可能同时折叠多个函数的 body,也可能跳过单行语句——因为缩进没变。
所以:
- 绑定
ctrl+alt+2到editor.foldLevel2后,实际效果取决于当前语言和代码结构,无法保证只影响函数体 - 想稳定折叠某段函数内部逻辑?改用显式标记:
// #region internal logic+// #endregion,再配合Ctrl+Shift+[ - 某些插件(如 Auto Close Tag)会劫持
ctrl+alt+组合,绑定后无效时先禁用插件测试
折叠策略(foldingStrategy)是隐形开关
VSCode 默认用 "editor.foldingStrategy": "auto",会根据语言自动选语法树或缩进方式。但 Python 用户常卡在这儿:如果函数不折叠,大概率是策略被设成了 "indentation",导致只按缩进折叠,而忽略语义结构。
解决办法很直接:
- 打开设置(
Ctrl+,),搜foldingStrategy,选auto或手动在settings.json里加:"editor.foldingStrategy": "language-defined" - Rust 用户需额外启用
"rust-analyzer.cargo.loadOutDirsFromCheck": true,否则折叠不工作且无提示 - 设成
indentation后,纯文本也能折叠,但容易误折(比如把连续空行当一级缩进)
这个配置不报错、不弹窗,但它决定你按多少次 Ctrl+K Ctrl+0 都没用——最容易被忽略,也最难排查。


















