VSCode代码折叠默认开启但逻辑因语言而异:支持function/class/if等语句块、import/export、Python缩进块、JSON/HTML嵌套及#region注释;快捷键为Ctrl+Shift+[折叠/Ctrl+K Ctrl+0全折等;Python需统一空格缩进、禁用空行中断、装饰器换行;#region在JS/TS/C#/C++/Java中有效,Python不原生支持。

VSCode 的代码折叠功能默认开启,不需要额外安装插件,但很多开发者没意识到它对不同语言、不同结构的折叠逻辑有差异,导致点不动、折不全或误展开。
哪些代码块能被自动折叠
VSCode 根据语言语法和缩进自动识别可折叠区域。常见支持类型包括:
-
function、class、if、for、while等语句块(需有大括号{}或明确作用域) - JavaScript/TypeScript 中的
import/export块(按分组折叠) - Python 中基于缩进的
def、class、if块(要求缩进一致,且无空行打断) - JSON / Markdown / HTML 中的嵌套结构(如 嵌套、JSON 对象/数组)
- 注释块:以
// #region和// #endregion包裹的任意代码段(JS/TS/C#/C++ 等均支持)快捷键与鼠标操作要记准
光标停在可折叠行时,左侧会出现小三角(▶ 或 ▼),但更高效的是用快捷键:
- 折叠当前块:
Ctrl+Shift+[(Windows/Linux)或Cmd+Option+[(macOS) - 展开当前块:
Ctrl+Shift+](Windows/Linux)或Cmd+Option+](macOS) - 折叠全部:
Ctrl+K Ctrl+0(数字零,不是字母 O) - 展开全部:
Ctrl+K Ctrl+J - 折叠到指定层级(如只留函数名):
Ctrl+K Ctrl+1~Ctrl+K Ctrl+5(数字代表缩进/嵌套深度)
注意:
Ctrl+K是前缀,松开后再按第二键;误按Ctrl+K Ctrl+K会触发“添加书签”,不是折叠。Python 折叠失效?检查这三点
Python 依赖缩进来定义结构,VSCode 默认用缩进判断折叠区域,但容易出问题:
- 混用 Tab 和空格:VSCode 可能无法连续识别作用域 → 统一用空格(推荐 4 空格),并在状态栏点击缩进显示(如
Spaces: 4)确认 - 函数内有空行:默认情况下,空行会中断折叠区域 → 在
settings.json中添加:"python.foldingStrategy": "indent"
(强制按缩进而非语法树折叠) - 使用了装饰器但没换行:如
@decorator\ndef func():一行写完,VSCode 可能不把def当作可折叠入口 → 装饰器单独成行更可靠
自定义折叠区域:#region 很实用但有语言限制
不是所有语言都原生支持
#region,实际可用性如下:- ✅ JavaScript / TypeScript / C# / C++ / Java(需插件如 “Java Extension Pack”)支持
// #region和// #endregion - ❌ Python 不支持注释式 region(PEP 明确拒绝),但可用
#region作为普通注释,配合插件 “Python Indent Folding” 手动标记 - ⚠️ HTML 中可用
和,但需启用"html.suggest.html5": true
示例(TypeScript):
// #region API handlers function getUser() { /* ... */ } function updateUser() { /* ... */ } // #endregion折叠后只显示
// #region API handlers这一行 —— 这比靠缩进更可控,尤其适合配置块、Mock 数据块等非语法结构。真正卡住人的往往不是“会不会用”,而是“为什么这个 if 不折叠”“为什么 Python 空行后就断开了”。多看状态栏缩进提示,少依赖肉眼判断缩进是否对齐,比背快捷键更重要。
- 注释块:以










