Ctrl+Shift+[没反应是因为光标未落在function/class/def/{等语法起始行,需确保光标位置正确、语言模式识别准确、foldingStrategy配置合理且语言扩展启用foldingProvider;Ctrl+K Ctrl+0依赖文件已保存、语言模式正确及扩展支持;#region折叠须严格遵循格式规范且依赖扩展支持。

Ctrl+Shift+[ 没反应?先看光标在哪一行
这个快捷键只对「光标所在行向上最近的可折叠结构」生效,不是全局命令。它不会猜你想折哪,只会找 function、class、def、if、{ 这类语法起始行。
常见失效场景:
- 光标停在空行、单行注释末尾、字符串内部、或
def my_func():的下一行(哪怕只差一行) - Python 文件里光标在缩进不一致的行上,VSCode 无法识别为结构起点
- JSX 或 Vue SFC 中的内联
{}表达式未被语言扩展支持折叠
安全做法:把光标放在 def/function/class 所在行任意位置;鼠标悬停在行号左侧出现 ▶ 图标时再按,成功率更高。
Ctrl+K Ctrl+0 折叠全部,但为什么有些函数还在展开?
Ctrl+K Ctrl+0 只作用于语言扩展明确标记为“可折叠”的结构,不是所有代码块都默认支持。它依赖三个前提同时成立:
- 文件已保存(未保存的临时文件可能不触发语法折叠)
- 右下角语言模式显示正确(如
JavaScript,不是Plain Text) - 当前语言的
foldingProvider已启用(例如 Python 需要官方ms-python.python扩展)
Python 用户特别注意:python.foldingStrategy 若设为 none,函数体完全不折叠;建议删掉该配置项,或设为 language-defined 或 indentation。JS/TS 用户若用 auto 策略却折不动深层花括号,可能是扩展未加载完整(如 typescript-hero 冲突)。
#region 折叠写错一个字符就不生效
#region 不是万能标签,它需要语言扩展支持且格式极其严格。VSCode 不校验配对,写漏 #endregion 会导致后续所有内容无法折叠。
必须满足的条件:
- JS/TS 必须写成
// #region API config,不能用/* #region */ - Python 同样支持,但必须用
# #region utils(开头是#,不是//) - 必须独占一行,前面只能有空白符;后面紧跟空格和
#region(大小写敏感) - 嵌套最多到 5 层,再深可能触发渲染异常
写漏 #endregion 不报错,但该 #region 之后所有内容都无法被折叠(包括后续合法的 #region)。
foldingStrategy 设置不当会直接禁用语法折叠
editor.foldingStrategy 控制 VSCode 怎么识别可折叠结构,默认是 auto,会根据语言自动选缩进或语法树方式。但它不是“越智能越好”:
- 设成
indentation后,JSON 或 Markdown 也能按缩进折叠——但 JSON 本来靠括号匹配,强行切过去反而让对象/数组不折叠 - Python 设为
indentation可能导致单行if被当成独立块折叠,干扰阅读 - 某些语言扩展(如 Rust 的
rust-analyzer)默认禁用语法折叠,得手动启用rust-analyzer.cargo.loadOutDirsFromCheck才能让foldingProvider正常工作
这个配置项不报错、不提示,只表现为“明明写了函数却折不动”,是最容易被忽略的根因。


















