ctrl+shift+[ 和 ctrl+shift+] 折叠/展开当前代码块,需将光标置于 function、if、class 等语法起始行,否则无效;空行、注释、字符串或缩进错误处不响应。

Ctrl+Shift+[ 和 Ctrl+Shift+] 折叠/展开当前代码块,但光标位置决定成败
这两个快捷键不是“按了就折”,而是从光标所在行向上扫描最近的可折叠结构边界(比如 function、if、class、{、Python 的 def 行),再折叠整个块。光标落在空行、单行注释、字符串里或缩进错位的行上,基本没反应。
- 必须把光标放在有语法起始意义的行:如
function foo()、for (let i = 0; i 、<code>def main():这类行本身,而不是它下面的空行或print("hello") - Python 文件中,如果
foldingStrategy是默认auto,普通函数可能不被识别;设为indentation后,Ctrl+Shift+[才能稳定收起整个def块 - JSX 或 Vue SFC 中的内联
{}默认不折叠——需要装对应语言插件,并确认其提供了foldingProvider
Ctrl+K Ctrl+0 和 Ctrl+K Ctrl+J 折叠/展开全部,但只作用于已识别结构
这是两步操作:先按 Ctrl+K 松开,再按 Ctrl+0(数字零,不是字母 O)。它不会折叠纯文本、空行、单行注释,也不管你手动用鼠标折过哪些地方——只对语言扩展标记为“可折叠”的结构生效,比如函数体、类、if 块、HTML 标签对。
- 常见失效场景:
Python文件里只有class被折,def函数还在展开 → 检查右下角语言模式是否为Python,并在设置中确认"python.foldingStrategy": "indentation" -
Ctrl+K Ctrl+J只展开“当前已折叠的层级”,不会还原到原始未折叠状态。比如你手动折了第 3 层,又用Ctrl+K Ctrl+0折了第 1 层,那Ctrl+K Ctrl+J只会展开第 1 层,第 3 层仍保持折叠 - Mac 用户注意:
Cmd+K必须按住不放依次按下K→0,松手太早会触发命令面板而非折叠
用 #region 手动定义折叠区域,但格式和语言支持缺一不可
VSCode 不是看到 #region 就自动折叠,它依赖当前语言扩展是否解析这种标记。最通用的是 // #region 和 // #endregion(JS/TS/Python),但 Python 必须用 # 开头,不能写成 /* #region */。
- JS/TS 写法:
// #region API config+// #endregion - Python 写法:
# region Mock data+# endregion(注意是#,不是//) - 如果写了不生效,先检查右下角语言模式是否正确(比如
.js文件被识别为Plain Text就完全不工作) - 折叠区域支持嵌套,但深度超过 5 层可能触发渲染异常,编辑器左侧行号区图标会消失或错位
折叠策略 foldingStrategy 直接决定能不能折、怎么折
editor.foldingStrategy 设置值为 auto(默认)或 indentation,影响所有折叠行为。它不报错、不提示,只表现为“该折的折不动”。
-
auto:靠语法树识别(JS/TS 靠{},HTML 靠标签对),语义准确但对 Python 函数体支持弱 -
indentation:强制按缩进层级折叠,适合 Python/Ruby,但会把单行if也当独立块折,反而干扰阅读 - JSON 文件默认可折叠(靠括号匹配),但
.jsonc或自定义后缀(如.config.json)可能失效,因为语法解析器没加载
真正容易被忽略的点是:折叠状态默认不保存,关掉文件再打开,所有展开/折叠动作都会重置。如果需要持久化,得装扩展(如 Restore Code Folding)或手动开启 editor.restoreViewState 并确保它没被其他插件覆盖。











