Ctrl+K, Ctrl+1 折叠的是 scope 嵌套深度为 1 的语法结构,如顶层 if name == "__main__":、__all__ 和 import,而非函数或 class;其生效需满足三个前提:右下角显示真实语言名、语法定义含 foldingStartMarker、缩进纯空格无混用。

Ctrl+K, Ctrl+1 折的是什么层级?
它折的是语法定义中 scope 嵌套深度为 1 的结构,不是“所有函数”或“所有 class”。在 Python 中,if __name__ == "__main__":、__all__ = []、顶层 import 常属 level 1;而 def 和 class 多在 level 2,所以 Ctrl+K, Ctrl+1 很可能根本折不到函数——你看到的“一级代码块”,其实是语法包认定的最外层作用域节点。
这个命令不依赖光标位置,但极度依赖右下角语言标识:若显示 Plain Text,它静默失败,无任何提示。
为什么按了没反应?三个硬性前提缺一不可
- 右下角必须显示真实语言名(如
Python、JavaScript),不能是Plain Text或空 - 当前语法定义中必须包含
foldingStartMarker规则(原生 Python/JS 支持,但某些插件语法如Python Improved可能缺失) - 文件不能混用 Tab 和空格缩进——尤其 Python,缩进断裂会导致
meta.function.python作用域无法生成,fold_by_level和Ctrl+K, Ctrl+1全部失效
想只折函数?别信快捷键数字,用 fold_by_level 实测
Ctrl+K, Ctrl+1 不可控,真正能逼近“只折函数”的是命令面板里的 fold_by_level:
- 先确认一个
def行能被Ctrl+Shift+[正常折叠(左侧 gutter 出现 ▶) - 按
Ctrl+Shift+P→ 输入fold_by_level→ 回车 - 依次试
2、3、1(Python 通常从2开始;JS/TS 常需3) - 输错数字无反馈,没反应就换下一个;装饰器跨行或 docstring 紧贴
def行会导致识别断裂,加空行可修复
临时收起任意几行?fold_selection 最稳
当语法识别失效、或你只想藏一段 JSON 配置、日志、测试数据时,fold_selection 是唯一绕过所有限制的方式:
- 鼠标拖选或多行选中(如连续按
Ctrl+L) - Windows/Linux 按
Ctrl+Shift+Alt+[,macOS 按Cmd+Ctrl+Option+[ - 左侧 gutter 立即出现独立三角图标,点击即可展开/收起
- 该折叠仅存于当前会话,关闭文件即丢,不写入磁盘,也不受语法或缩进影响
真正容易被忽略的不是快捷键记错,而是缩进混用和语法包冲突——哪怕只有一处 Tab 插在空格缩进里,整个文件的 def 都可能从作用域树上消失。











