Ctrl+Shift+[和Ctrl+Shift+]是唯一直接跳转折叠起始行的快捷键,定位折叠标记所在行而非内容首行;#region需严格匹配语言注释规则,否则失效;折叠状态默认不保存,需启用workbench.editor.restoreViewState或安装Restore View State扩展。

光标无法跳到折叠起始行,基本是因为快捷键没对上、光标位置错了,或者 VSCode 根本没识别出那是可折叠区域。
Ctrl+Shift+[ 和 Ctrl+Shift+] 是唯一直接跳转折叠起始行的快捷键
这两个快捷键不依赖语言服务器,只靠编辑器自身识别的折叠范围({、/*、#region 等),定位的是「折叠标记所在行」,不是内容第一行。
- 按
Ctrl+Shift+[:从当前光标位置向上扫描,跳到最近一个可折叠结构的起始行(比如function foo() {或if (x) {) - 按
Ctrl+Shift+]:向下扫描,跳到下一个折叠起始行 - 光标停在空行、注释行、字符串内、或缩进错位的 Python 行 → 必然没反应
- 鼠标悬停在行号左侧出现 ▶ 图标时再按,成功率最高;没图标说明 VSCode 没识别出结构
为什么 Ctrl+Shift+O(大纲视图)点不了、跳不准?
Ctrl+Shift+O 显示的是语言服务器提供的符号(函数、类、方法等),不是所有折叠块都能列出来。它和折叠导航是两套机制。
- 显示
No symbols found in document:文件语言模式错误(右下角是Plain Text而非JavaScript)、没装对应扩展(如Pylance)、或文件未保存 - 点了不跳转:符号存在但跳转目标被折叠了 → 先展开父级(比如先展开 class,再点 method)
- 想强制让某段逻辑出现在大纲里:用
// #region不行,得写成函数/类/导出变量,否则大纲不会收录
#region 折叠能跳,但格式错一个字符就失效
#region 是最可控的手动折叠方式,但它不进大纲视图,只响应折叠跳转快捷键。
- JS/TS 用
// #region 标题,Python 用# region 标题(注意空格),Go 用//region(无#)——前缀必须匹配语言注释规则 -
#endregion少写一个#、或多一个空格,VSCode 就不认,后续所有代码失去折叠能力 - 它不校验配对,写漏
#endregion后,整段到文件末尾都会被当成一个折叠块,无法细分跳转 - 不能嵌套同名
#region,否则折叠控件可能错乱
折叠状态不保存,关了再开就全展开了
VSCode 默认不记忆折叠状态,每次打开文件都是初始展开态。这不是 bug,是设计行为。
- 要保留折叠状态:装扩展
Restore View State,或启用设置workbench.editor.restoreViewState(注意这是编辑器级设置,影响所有文件) - 该设置对未保存的临时文件无效;只对已保存、有路径的文件生效
- 即使开启了,如果某段代码根本没被识别为可折叠(比如 JSX 内联
{}缺少插件支持),它依然不会记住
真正容易被忽略的是:折叠跳转和符号跳转走的是完全不同的底层机制。一个靠编辑器推导折叠范围,一个靠语言服务器解析 AST。混用时别指望 Ctrl+Shift+O 能列出所有 #region,也别指望 Ctrl+Shift+[ 能跳进没语法结构的纯缩进块(除非你把 editor.foldingStrategy 改成 indentation 并确认扩展支持)。











