<p>VSCode没有“只折叠函数”的原生快捷键,Ctrl+K Ctrl+0是全量折叠(含类、if块、注释等),其效果取决于语言扩展提供的可折叠节点;Python需改foldingStrategy为indentation或用# #region手动标记。</p>

没有“只折叠函数”的原生快捷键,Ctrl+K Ctrl+0 是最接近的方案,但它会连类、if 块、注释一起折——不是函数专属,而是全量折叠。
Ctrl+K Ctrl+0 为什么看起来像只折函数?
这个组合键触发的是 editor.foldAll 命令,它不识别结构类型,只按当前语言扩展提供的可折叠节点递归收起。JavaScript/TypeScript 中 function 和 class 天然是折叠单元,所以视觉上像“全折函数”;但 Python 默认对普通 def 函数体支持弱,if 块反而更容易被折叠。
- 必须先松开
Ctrl+K,再按Ctrl+0(不是长按或三键同时按) - 文件未保存时,Pylance 或 TypeScript 语言服务可能不加载
foldingProvider,导致无反应 - 右下角状态栏显示
Plain Text或JSON时,该快捷键完全无效
Python 函数体死活不折叠?先查 editor.foldingStrategy
VSCode 默认用 "auto" 策略,Python 官方扩展(ms-python.python)在没启用 Pylance 时,常退化为仅识别 class 和模块级 if __name__ == "__main__",普通 def 不被视为折叠起点。
- 打开设置(
Ctrl+,),搜foldingStrategy,把值从auto改成indentation:强制按缩进层级折叠,def函数体就能收起来了 - 副作用:单行
if、空行后缩进块也可能被误折;若干扰大,切回auto,改用#region标记 - 确认
Pylance已启用,且没被禁用(禁用后改设置也白搭) - 检查
settings.json是否存在"python.foldingStrategy": "none",删掉或改为"language-defined"
想真正只折函数体?用 #region 手动划界
VSCode 原生不支持“按结构类型过滤折叠”,但允许你用注释显式定义折叠区域——这是跨语言、最可控的方式。
- Python 必须顶格写
# #region和# #endregion(开头是#,不是//;中间一个空格,不能多不能少) - JS/TS 写
// #region和// #endregion;Vue SFC、Markdown 里也能用,只要语言扩展支持 -
# #region必须独占一行,前面只能有空白符,后面紧跟空格和#region(大小写敏感) - 写漏
# #endregion不报错,但该#region后所有内容都无法折叠(包括后续合法的#region)
折叠状态默认不保存,每次打开都是全展开
这不是 bug,是 VSCode 的默认行为:折叠状态只保留在当前编辑器会话中,关闭再打开就重置。
- 确保全局或工作区设置了
"editor.foldEnable": true(一般默认开启,但可能被其他配置覆盖) - 检查有没有
"editor.showFoldingControls": "mouseover"这类配置——它不影响功能,但会让折叠箭头只悬停才显示,容易误判为“没折叠” - 某些插件(如 Prettier)可能干扰折叠状态,临时禁用试试;重启窗口后仍无效,大概率是语言支持本身没实现该折叠点


















