ctrl+k ctrl+0(win/linux)或cmd+k cmd+0(macos)是唯一真正作用于所有函数体的快捷键,但前提是vscode正确识别语言模式、文件已保存,且python用户需单独设置"python.foldingstrategy": "indentation"并重启窗口。

Ctrl+K Ctrl+0 真的能折函数体,但得先让 VSCode “认出”它是函数
直接说结论:Ctrl+K Ctrl+0(Windows/Linux)或 Cmd+K Cmd+0(macOS)是唯一真正作用于“所有函数体”的快捷键——前提是 VSCode 把当前文件当作了支持函数折叠的语言。它不是只折函数,而是按语言规则折叠所有语法块,而函数定义(def、function、class 等)天然构成一级折叠单元。
常见错误现象:按键后毫无反应,或只折了注释和 import,函数体纹丝不动。
- 右下角状态栏显示的是
Plain Text?点它,手动选成Python、JavaScript等对应语言 - 文件没保存?未保存的
Untitled-1缓冲区通常不触发语法解析,Ctrl+S保存后再试 - Python 用户特别注意:
python.foldingStrategy默认是auto,但官方扩展在该模式下常忽略普通def函数体;必须设为indentation
Python 函数体不折叠?别调 editor.foldingStrategy,改 python.foldingStrategy
这是 Python 用户最常踩的坑:全局设置 "editor.foldingStrategy": "indentation" 对 Python 文件无效。VSCode 的 Python 扩展使用独立配置项,全局设置会被覆盖。
正确做法是显式设置 Python 专属策略:
- 打开设置(
Ctrl+,),搜python folding,找到Python > Folding Strategy,下拉选indentation - 或直接编辑
settings.json,加这一行:"python.foldingStrategy": "indentation" - 改完必须重启窗口(
Developer: Reload Window),仅重载配置不生效
注意:indentation 模式下,单行 if 或缩进不一致的代码块可能被误折叠,这是用准确性换功能的 trade-off。
Ctrl+Shift+[ 不是“折函数”,只是“折光标所在那一块”
很多人把光标停在函数第一行末尾,猛按 Ctrl+Shift+[,结果没反应。这不是快捷键失效,而是它根本没找对目标。
这个快捷键只做一件事:定位光标所在位置最近的一个可折叠结构,并折叠它。它的行为完全取决于光标落点:
- 光标在
def my_func():行任意位置 → 通常能折整个函数体 - 光标在函数体中间某行 → 可能只折那个
if或for块,而非函数 - 光标在空行或注释行 → 大概率无响应
想批量操作函数体?别依赖它。它不是设计来干这事的,Ctrl+K Ctrl+0 才是唯一可靠路径。
展开所有函数体时,“已折叠”和“可折叠”是两回事
Ctrl+K Ctrl+J 展开的是“已被折叠的区域”,不是“所有函数体”。这点极易误解。
比如你之前只手动用 Ctrl+Shift+[ 折了一个函数,又用 Ctrl+K Ctrl+0 折了全部,此时再按 Ctrl+K Ctrl+J,只会把那一个手动折的 + 全部折的都展开。但它不会去“发现”那些从未被折叠过的函数体并强行展开——那些函数本来就是展开的,它就不管。
所以,如果你想要彻底清空折叠状态、回归原始视图,安全做法是:Ctrl+K Ctrl+0 先全折一遍,再 Ctrl+K Ctrl+J 全展开一次。否则,残留的“未折叠但可折叠”状态会一直存在。











