Ctrl+K Ctrl+0不是“只折叠函数”的快捷键,而是触发editor.foldAll命令的全量折叠操作,它不区分结构类型,会一并折叠类、if块、注释等所有当前语言支持的可折叠节点;JavaScript/TypeScript中因function和class均为天然折叠单元而显似“只折函数”,但Python默认对普通def函数体支持弱,需改editor.foldingStrategy为indentation或手动添加#region标记才能可靠折叠。

没有“只折叠函数”的原生快捷键,Ctrl+K Ctrl+0 是最接近的方案,但它会连类、if 块、注释块一起折——不是函数专属,而是全量折叠。
Ctrl+K Ctrl+0 为什么不是“只折函数”
这个快捷键触发的是 editor.foldAll 命令,它不区分结构类型,只按当前语言提供的可折叠节点递归收起。JavaScript/TypeScript 中 function 和 class 都是天然折叠单元,所以视觉上像“全折函数”;但 Python 默认只把 class 和模块级 if __name__ == "__main__" 当作折叠点,普通 def 函数体可能根本不响应——除非你改了折叠策略。
- 必须松开
Ctrl+K后再按Ctrl+0(不是长按,也不是Ctrl+K+0) - 文件未保存时,部分语言扩展(如 Pylance)可能不加载 foldingProvider,导致无反应
- 右下角语言模式显示
Plain Text或JSON时,该快捷键完全无效 - Mac 用户注意:
Cmd+K Cmd+0必须按住Cmd不放,依次敲K→0,松早了会打开命令面板
Python 函数不折叠?先看 editor.foldingStrategy
Python 官方扩展默认用缩进识别结构,但它的 foldingProvider 对普通 def 函数体支持较弱。这时候光靠 Ctrl+K Ctrl+0 没用,得手动干预设置:
- 打开设置(
Ctrl+,),搜foldingStrategy - 把值从默认
auto改成indentation—— 这会让 VSCode 忽略语法,纯按缩进层级折叠,def函数体就能被收起来了 - 但副作用是:单行
if、空行后的缩进块也可能被误折,如果干扰大,就切回auto,改用#region - 确认已启用 Pylance 扩展,且没被禁用(禁用后
foldingStrategy设置也白搭)
想真正只折函数?用 // #region 手动划界
VSCode 原生不支持按结构类型过滤折叠,但允许你用注释显式定义折叠区域。这对函数体特别实用,且跨语言稳定:
- 在函数开头顶格写
// #region(JS/TS)或# #region(Python),结尾顶格写// #endregion或# #endregion - 不能带空格或额外内容:
// #region myFunc无效,//#region也无效,必须是// #region - JSX、Vue SFC、甚至 Markdown 文件里也能用,只要对应语言扩展支持(官方 JS/TS/Python 扩展都支持)
- 折叠后,鼠标悬停在折叠箭头上能预览区域首尾行,比猜函数边界更可靠
别忽略插件和输入法劫持
很多“快捷键失效”根本不是 VSCode 的问题,而是外部干扰:
- Prettier、Ember CLI、ESLint 等插件常重映射
Ctrl+K前缀,去keybindings.json搜editor.foldAll能看到是否被覆盖 - 中文输入法(尤其是搜狗 Mac 版)默认绑定
Cmd+K切中英文,需在输入法设置里关掉 - 某些键盘布局(如 HHKB)可能把
Ctrl+K识别为系统快捷键,需在系统设置中放行 - 验证方法:打开命令面板(
Ctrl+Shift+P),输入Fold All手动执行一次,如果成功,说明是快捷键被劫持;如果失败,才是语言或设置问题
真正麻烦的从来不是快捷键记不住,而是折叠行为背后混着语言模式、扩展状态、策略配置、输入法拦截四层依赖——调一个参数前,先确认另外三个没崩。


















