Sublime折叠脚本结构的关键是识别作用域而非快捷键:光标须停在def/class/function等起始行,状态栏需显示正确语言名,Show Scope Name应返回含meta.function的完整作用域链;否则折叠失效。

Sublime 里想靠折叠理清脚本结构,关键不是“怎么折”,而是“折谁”和“为什么折不了”——90% 的失败源于作用域没识别出来,而不是快捷键按错。
光标停在哪,决定了 Ctrl+Shift+[ 能不能折
这个快捷键只响应「起始行」:Python 必须停在 def 或 class 行,JS 必须停在 function、const xxx = () => { 或 { 行。停在函数体内部、空行、注释行、字符串里,一律静默失败。
- 右下角状态栏必须显示
Python、JavaScript等真实语言名;若为Plain Text,所有语法级折叠直接关闭 - 验证是否识别成功:光标停在
def行,按Ctrl+Shift+P→ 输入Developer: Show Scope Name,状态栏应出现类似source.python meta.function.python;若只有source.python,说明作用域链断了 - 常见破坏作用域的行为:
@decorator单独一行紧贴def、docstring 紧挨def行无空行、Tab 和空格混用缩进
fold_by_level 是唯一能“只折函数”的可控方式
Ctrl+K, Ctrl+0 会把 if、for、顶层注释、__all__ = [] 全收走,根本不适合结构审查。真正能限定范围的只有 fold_by_level 命令,但它不认缩进,只认作用域层级(scope level)。
- 先确保一个
def行能被Ctrl+Shift+[正常折叠(否则fold_by_level必然无效) - 按
Ctrl+Shift+P→ 输入fold_by_level→ 回车 → 依次试2、3、1(Python 多数是2,JS/TS 常需3;输错无提示,没反应就换) - 嵌套函数(如
def outer(): def inner():)要再执行一次fold_by_level 3才能收内层 - 装饰器跨行或 docstring 紧贴
def会导致跳过,加空行即可修复
语法失效时,正则选中 + Ctrl+Shift+[ 是最快兜底方案
当右下角是 Plain Text、Show Scope Name 只返回 source.python、或用了非标插件(如旧版 Vue Component)时,fold_by_level 和 Ctrl+K, Ctrl+0 全部失效,只能退到文本层。
- 按
Ctrl+F→ 输入正则:^def\s|^function\s|^[a-zA-Z]+\s*=\s*function\s*\(.*\)\{ - 勾选
Regex和Match case→ 点Find All,所有函数定义行被高亮选中 - 按
Ctrl+Shift+[—— Sublime 会对每个选中行单独触发一次折叠 - 风险:若某行含
def字样却非函数(如注释里写了# def handler()),也会被误折
侧边栏没三角图标?不是功能坏了,是设置关了
折叠成功但左侧 gutter 没按钮,说明 UI 渲染被禁用,和语法无关。
- 打开
Preferences → Settings,右侧用户设置中确认有:"fold_buttons": true - 建议同时加:
"fade_fold_buttons": false,避免按钮自动淡出 - 改完不用重启,重载文件(
Ctrl+Shift+P→Revert File)或切换标签页即可生效 - 某些插件(如旧版
Vue Syntax Highlighter)会覆盖语法定义,导致折叠逻辑异常;删掉或更新后重启 Sublime 即可恢复
真正卡住人的,往往不是“怎么折”,而是“为什么这行明明有 def 却折不了”——八成是作用域没识别出来,或者语法包根本没声明折叠规则。别急着查快捷键,先看状态栏语言名和 Show Scope Name 输出。

















