Ctrl+Shift+[ 折不进函数体是因为该快捷键依赖光标所在行的语法结构:必须置于 def/function/class/{ 等起始行才能折叠整个函数,若在函数体内则仅折叠最近可折叠节点(如 if/for 块)。

为什么 Ctrl+Shift+[ 折不进函数体?光标位置决定折叠范围
VSCode 的 Ctrl+Shift+[(Windows/Linux)或 Cmd+Shift+[(macOS)不是“选中就折”,而是向上查找最近的**语法可折叠节点**。如果光标落在函数体中间某行(比如 return 前),它可能只折叠当前 if 或 for 块,而非整个函数。
- 必须把光标停在
def、function、class、if、{等**起始行**上,才能触发该结构的整体折叠 - 空行、注释行、字符串内、三引号文档字符串第一行——这些位置按快捷键通常无响应
- Python 用户尤其要注意:若
editor.foldingStrategy设为indentation,则光标停在哪一行,就按缩进层级收起对应块;设为auto(默认)才依赖语言服务器识别函数边界
Ctrl+K Ctrl+0 没反应?先查 languageId 和 foldingStrategy
Ctrl+K Ctrl+0(折叠全部)失效,90% 是因为 VSCode 根本没把当前文件当“可折叠语言”处理。
- 右下角状态栏看语言模式:显示
Plain Text或JSON就别指望函数能折——点它,手动选JavaScript、Python或对应语言 - 打开命令面板(
Ctrl+Shift+P),运行Developer: Inspect Editor Tokens and Scopes,点击函数名,确认右上角显示的是javascript或python,不是json或plaintext - 检查设置里
editor.foldingStrategy是否被设成none;值应为auto(推荐)或indentation - JSON 文件默认禁用折叠,即使 languageId 正确也需手动启用:
"editor.foldingStrategy": "indentation"
想只折 mock 数据或日志段?用 #region 手动划界
原生折叠不支持“只折函数,不折 if 块”,但你可以绕过语法限制,用注释标记自定义区域。
- JavaScript/TypeScript/C# 支持:
// #region和// #endregion(顶格写,#后无空格) - Python 默认不识别
#region,但可用插件如Python Docstring Generator启用,或改用#region(无空格、无注释文字)配合editor.foldingStrategy: indentation - HTML/JSX 中,
<!-- #region -->和<!-- #endregion -->有效 - 注意:VSCode 不校验
#endregion是否匹配,多写或漏写会导致折叠错位
格式化后折叠状态丢失?这不是 bug,是默认不保存
执行 Shift+Alt+F 或保存自动格式化后,之前手动折叠的函数突然全展开了——这不是崩溃或插件冲突,是 VSCode 默认行为。
- 折叠状态默认不跨会话持久化,关闭再打开文件就会重置
- 要保留状态,需确保
"editor.foldEnable": true(一般默认开启),且没被工作区设置覆盖 - 真正起作用的是扩展:如
Restore Folding State或启用editor.restoreViewState(部分版本支持,非所有语言都生效) - 更可靠的做法:对关键逻辑块用
#region标记,这类手动折叠区比语法折叠更容易被记住和恢复


















