Ctrl+Shift+[ 失效因光标未在最内层可折叠结构起点,且需语言标识正确;Ctrl+K,Ctrl+0 折叠语法定义的顶层结构;手动选区折叠是语法失效时的兜底方案。

Ctrl+Shift+[ 没反应?先看光标停在哪、语言对不对
这个快捷键只对光标所在行的**最内层可折叠结构起点**生效,不是“按了就折”,更不认缩进空格数。常见失效场景包括:
- 光标停在
print("hello")这类函数体内部行,或空行、注释行、字符串里 - 右下角状态栏显示
Plain Text、Unknown Syntax或空白——此时整个折叠系统静默关闭 - 用了第三方语法插件(如
Python Improved),它可能删掉了原生foldingStartMarker规则
验证方法:光标停在 def foo(): 行,按 Ctrl+Shift+P → 输入 Developer: Show Scope Name 回车,状态栏应含 meta.function.python;若只有 source.python,说明语法未加载。
Ctrl+K, Ctrl+0 是真·一键收起全部,但依赖语法层级定义
Ctrl+K, Ctrl+0(Windows/Linux)或 Cmd+K, Cmd+0(macOS)调用的是 fold_all 命令,它遍历整份文件,折叠所有语法定义中声明为可折叠的顶层结构(如函数、类、模块级 if、for)。但它不是“把所有缩进块都收起来”,而是严格按当前语言语法文件里 fold_level = 1 的作用域来执行。
- 必须分步按:
Ctrl+K松开,再按Ctrl+0(数字零,非字母 O) - 不依赖光标位置,但极度依赖右下角语言标识是否为真实语法名(如
Python,非Plain Text) - 在 Python 中,它通常只折到
meta.class和meta.function层,不会动嵌套更深的if块——除非语法包明确将其设为同级
按层级折叠(Ctrl+K, Ctrl+1~8)不是按缩进空格数算的
Ctrl+K, Ctrl+1 到 Ctrl+K, Ctrl+8 折叠的是语法定义中嵌套深度为对应数字的作用域,和你代码里写了几个空格完全无关。例如:
-
Ctrl+K, Ctrl+1在 Python 中常只折import和顶层赋值,不碰class或def(因它们属于更深 scope) -
Ctrl+K, Ctrl+2对多数 Python 文件能收起所有函数定义,但若装饰器跨行、或 docstring 紧贴def行,部分函数可能被跳过 -
Ctrl+K, Ctrl+8并非“最深”,而是尝试折叠到语法支持的最大层级;超出则静默失败,不报错
根本原因在于作用域识别断裂:光标停在 def 行时,show_scope_name 若只输出 source.python meta.decorator.python 而无 meta.function.python,说明解析链断了——常见于装饰器换行写且与 def 之间无空行。
手动选区折叠是唯一绕过语法限制的方式
当语法识别失败、或想临时折叠 JSON/配置/注释块这类非标准结构时,fold_selection 是最可靠的选择。它不查 scope,不验缩进,不读 folding rules,纯粹按鼠标选中范围操作:
- 鼠标拖选任意连续行(包括空行、
// region注释、base64 字符串) - Windows/Linux 按
Ctrl+Shift+Alt+[,macOS 按Cmd+Ctrl+Option+[ - 侧边栏立刻出现独立三角图标,点击即可展开,不影响其他自动折叠块
注意:该折叠仅存于当前会话,关文件即丢;且 Ctrl+K, Ctrl+J(unfold_all)不会还原它,必须单独点侧边栏箭头。真正容易被忽略的点是——它不依赖右下角语言名,也不怕 Plain Text,是语法失效时的兜底方案。

















