sublime text 没有真正一键只折叠函数的原生命令;ctrl+k, ctrl+0 折叠所有顶层结构而非仅函数,fold_by_level 需实测作用域层级(python 通常为 2),语法失效时可用正则选中 def/function 行后 ctrl+shift+[ 折叠。

Sublime Text 没有真正意义上的“一键折叠所有函数”的原生命令。 所有号称“一键”的操作,要么误折非函数结构(如 Ctrl+K, Ctrl+0),要么依赖前提条件(如语法识别、作用域层级、缩进规范)——不满足任一条件就静默失败,且无提示。
为什么 Ctrl+K, Ctrl+0 不是你要的“只折函数”
这个命令触发的是 fold_all,它扫描所有被语法标记为“顶层可折叠结构”的节点,不区分类型。在 Python 文件中,它会同时折叠:class、顶层 if、for、模块级 docstring、__all__ = [] 甚至 JSON 字面量。你看到函数被收起,只是因为它们碰巧和这些结构处于同一作用域层级。这不是精准控制,是批量误伤。
怎么用 fold_by_level 精准只折函数(以 Python 为例)
这是最接近“只折函数”的原生路径,但必须实测作用域层级,不能硬记数字:
- 先将光标放在一个
def行,按Ctrl+Shift+[确认能正常折叠该函数 - 按
Ctrl+Shift+P→ 输入show_scope_name回车,状态栏若显示source.python meta.function.python,说明函数作用域已识别 - 再按
Ctrl+Shift+P→ 输入fold_by_level回车 → 尝试输入1、2、3……Python 官方语法通常是2,但自定义语法包可能为3或4 - 输错无反馈,只静默失败;输对后,所有被识别为
meta.function的块会同时收起
语法失效时的兜底方案:正则选中 + Ctrl+Shift+[
当右下角显示 Plain Text、或 show_scope_name 只返回 source.python 时,作用域链已断裂,fold_by_level 和 Ctrl+K, Ctrl+0 都不可靠。此时纯文本匹配最稳:
-
Ctrl+F打开查找 → 正则模式勾选 → 输入^def\s|^function\s|^[a-zA-Z]+\s*=\s*function\s*\(.*\)\s*\{ - 点
Find All,所有函数定义行被高亮选中(包括带装饰器的行) - 再按
Ctrl+Shift+[—— Sublime 会对每个选中行单独触发一次折叠 - 注意:此法不校验语义,若注释里写了
def foo()也会被误折
三个硬性前提缺一不可:右下角语言必须是 Python(不能是 Plain Text 或未定义折叠规则的插件语法)、缩进必须统一(Tab/Space 混用会导致 def 行不被识别)、函数定义格式要规范(比如 def f(): """doc"""; pass 这种紧贴写法常被跳过,加空行即可修复)。这些条件不满足时,任何“一键”操作都只会安静地什么也不做。











