ctrl+shift+[仅对光标所在行向上最近的def/function/class/{等语法起始行生效,非全局命令;需确保光标位置正确、语言模式识别准确、foldingprovider启用且文件已保存。

Ctrl+Shift+[ 没反应?先看光标在哪一行
这个快捷键只对「光标所在行向上最近的可折叠结构起始行」生效,不是全局命令。它不会跳转、不会猜测,只认 def、function、class、if、{ 这类语法开头的行。
常见失效场景:
- 光标停在空行、单行注释末尾、字符串内部(比如
"#region"里) - 光标在
def my_func():的下一行——哪怕只差一行,就找不到折叠起点 - 语言模式是
Plain Text而非Python或JavaScript(右下角状态栏确认)
安全做法:把光标放在 def 或 function 所在行任意位置,再按 Ctrl+Shift+[;鼠标悬停在行号左侧出现 ▶ 图标时再按,成功率更高。
Ctrl+K Ctrl+0 折叠全部,为什么有些函数还在展开?
这个组合键只作用于语言扩展明确标记为“可折叠”的结构,不是所有代码块都默认支持。它依赖三个前提同时成立:
- 文件已保存(未保存的临时文件可能不触发语法折叠)
- 右下角语言模式显示正确(如
JavaScript,不是Plain Text) - 当前语言的
foldingProvider已启用(例如 Python 需要官方ms-python.python扩展)
Python 用户特别注意:settings.json 中若误设了 "python.foldingStrategy": "none",会导致函数体完全不可折叠,删掉该配置或改为 "language-defined" 即可。
#region 折叠手动划区,格式错一个字符就不生效
#region 不是万能标签,它需要语言扩展支持且格式极其严格。VSCode 不校验配对,写漏 #endregion 会导致后续所有内容无法折叠。
关键规则:
- JS/TS 必须写成
// #region API config,不能用/* #region */ - Python 同样支持,但必须用
# #region utils(开头是#,不是//) - 必须独占一行,前面只能有空白符;后面紧跟空格和
#region(大小写敏感) - 嵌套最多到 5 层,再深可能触发渲染异常
写漏 #endregion 不报错,但该 #region 之后所有内容都无法被折叠(包括后续合法的 #region)。
折叠状态默认不保存,每次打开都是全展开
VSCode 默认不记住你上次折叠了哪些块。即使你花时间把几十个函数都收起来了,关掉再打开,一切归零。
这不是 bug,是设计行为。目前没有原生配置项开启“记忆折叠状态”,第三方扩展(如 Auto Fold)也仅能基于缩进或关键词做启发式恢复,无法精确还原。
真正容易被忽略的是:折叠图标是否出现,比快捷键是否生效更能说明问题——没图标,说明 VSCode 根本没识别出结构,这时候调快捷键纯属白按。











