Ctrl+K Ctrl+0(Win/Linux)或Cmd+K Cmd+0(macOS)可一键折叠所有被语言扩展识别的代码块,如函数、类、if块等,但不折叠空行、注释或字符串,且依赖正确语言模式、foldingStrategy设置及扩展正常启用。

Ctrl+K Ctrl+0 和 Ctrl+K Ctrl+J 只影响已识别结构,不是“全文件一键收放”
这两个快捷键不折叠空行、单行注释、字符串内容,也不管你手动用鼠标折过哪些地方——只对语言扩展标记为 foldingProvider 的结构生效,比如函数体、if 块、class、HTML 标签对。Python 文件里 def 没被折,大概率是右下角语言模式没识别成 Python,或 "python.foldingStrategy" 没设成 "indentation";JSX 中花括号嵌套过深时可能失效,得确认插件提供了完整 foldingProvider。
Ctrl+Shift+[ 和 Ctrl+Shift+] 依赖光标位置,不是“按了就折”
它们从光标所在行向上扫描最近的语法起始行(如 function、for、def main():),再折叠整个块。光标落在空行、注释行、字符串内、缩进错位的行上,基本没反应。Python 中若用默认 auto 策略,某些单行 if 或嵌套太浅的 def 可能不被识别,切到 indentation 后才稳定响应。
Ctrl+K Ctrl+1 到 Ctrl+K Ctrl+9 是按 AST 深度折叠,不是“视觉层级”
这个系列快捷键依据抽象语法树(AST)解析出的 depth 值批量控制折叠范围:Ctrl+K Ctrl+1 折到顶层函数/类,Ctrl+K Ctrl+2 再往里一层,以此类推。它和缩进空格数无关,也不受 foldingStrategy 设置影响——但前提是语言服务器得正确返回带 depth 的折叠范围。Rust 用户如果 rust-analyzer 没启用 "rust-analyzer.cargo.loadOutDirsFromCheck": true,AST 就残缺,Ctrl+K Ctrl+1 会直接失灵。
// #region 和 # region 折叠必须匹配语言注释语法
VSCode 不是看到 #region 就自动折,它依赖当前语言扩展是否解析这种标记。JS/TS 用 // #region,Python 必须用 # region(开头是 #,不是 //),Go 不支持该语法。写了不生效,先看右下角语言模式是不是对应语言;嵌套超过 5 层可能触发渲染异常,左侧折叠图标消失或错位,这时得手动拆分区域。
真正容易被忽略的是:折叠策略(foldingStrategy)和语言服务状态共同决定“哪些东西能被折”,而不是快捷键本身。光背快捷键没用,得先让编辑器认出结构。


















