Ctrl+Shift+[ 失效主因是光标未置函数定义行且语法未识别为 source.python meta.function.python;需设原生Python语法、统一缩进、加空行避跨行装饰器;fold_by_level 2常可精准折函数。

Ctrl+Shift+[ 没反应?先确认光标位置和语法识别
这个快捷键只对「光标所在行的最内层可折叠结构起点」生效,不是选中就折,也不是任意位置都能触发。常见失效原因有两个:右下角显示 Plain Text(折叠规则根本没加载),或光标停在函数体内部、空行、注释行、字符串里——这些位置不构成折叠起点。
验证是否识别成功:把光标放在 def 行或 function 行,按 Ctrl+Shift+P 输入 Developer: Show Scope Name 回车,状态栏若只显示 source.python,说明 meta.function 未命中;必须看到类似 source.python meta.function.python 才算真正识别。
临时修复方法:
- 右键 → Set Syntax → 选原生
Python(避开Python Improved等第三方语法) - 检查缩进是否混用:选中整个函数块 → 右键 → Convert Indentation → 统一为
Spaces或Tabs - 装饰器跨行或 docstring 紧贴
def行(如def f(): """doc"""; pass)容易跳过整块,加空行可绕过
Ctrl+K, Ctrl+0 折不了所有函数?问题出在作用域层级
Ctrl+K, Ctrl+0 是唯一真正遍历全文件、折叠所有顶层可折叠结构的命令,但它不认“函数”这个语义,只认 syntax definition 中定义的 scope depth = 0 的折叠点。如果它没反应,90% 是因为语法未识别;如果它折了 if 却漏了 def,大概率是 meta.function 所在的实际嵌套深度不是 0。
Python 文件中,def 通常在 scope depth = 2,JS 中常在 3。想只折函数、不碰 if 或模块级注释,就得用 fold_by_level 命令实测:
-
Ctrl+Shift+P→ 输入fold_by_level→ 回车 - 依次尝试输入
1、2、3(Python 多数情况是2) - 输错数字不会提示,只是静默无反应;不支持小数或负数
注意:fold_by_level 不区分语言,只看当前语法包里该作用域实际嵌套值,不同插件定义可能不同。
手动标记折叠区域:region 注释只在启用 fold_comments 后生效
Sublime 默认不识别 #region / #endregion(Python)或 // region / // endregion(JS),必须先在用户设置中开启:"fold_comments": true。否则这些标记会被忽略,折叠按钮也不会出现在 gutter 区。
启用后,折叠行为仍受限于语言支持:
- Python 支持
#region和#endregion(注意是井号,不是三个引号) - JavaScript/TypeScript 支持
// region和// endregion,但不支持/* region */形式 - HTML 不支持 region 标记,只能靠标签层级折叠(
Ctrl+K, Ctrl+T折属性)
这类标记创建的是「持久化折叠」,重启 Sublime 后依然存在,但仅限当前文件;它不改变原始代码,也不影响运行时逻辑。
分屏编辑时折叠状态不联动?这是设计,不是 bug
Sublime 的每个视图(View)完全独立:左栏折叠一个函数,右栏照样展开着,滚动、光标、搜索都互不影响。这不是缺陷,而是为避免因增删代码导致两侧行号错位、误操作。
需要临时对齐?可用快捷键手动同步:
-
Ctrl+K松手 →Ctrl+J:右栏会滚动到与左栏当前行号相同的位置 - 想持续联动?得装
ScrollSync插件,但它对 >10MB 文件响应迟缓,且只对「同一时间打开的两个视图」有效 - 更可靠的做法是用
Diff Files(Ctrl+Shift+P输入该命令)调外部 diff 工具比对差异
真正容易被忽略的是:手动选中代码后按 Ctrl+Shift+[ 创建的折叠,属于「会话级临时折叠」,关掉文件或退出 Sublime 就消失;它不写入文件,也不依赖语法定义,但无法跨会话保留。

















