正则选中函数行后批量折叠最实用,用ctrl+f配合正则匹配行首关键词(如^defs|^functions等),再ctrl+shift+[统一折叠,不依赖语法标记,适用于python、js、go等语言。

正则选中函数行后批量折叠最实用
想快速收起所有函数但语法不支持自动识别?用 Ctrl+F 配合正则选中再统一折叠,是绕过语法限制最快见效的方式。它不依赖 foldingStartMarker,只靠行首关键词匹配,适合 Python、JS、Go 等函数声明有固定模式的语言。
操作要点:
- 打开查找面板
Ctrl+F(Windows/Linux)或Cmd+F(macOS) - 勾选
.*(Regex)和Aa(Match case),输入正则:^defs|^functions|^[a-zA-Z]+s*=s*functions*{|^[a-zA-Z]+s*=s*(.*)s*=> - 回车后所有匹配行被高亮选中;若没反应,先确认右下角语言名是否为对应语言(如
Python,不是Plain Text) - 按
Ctrl+Shift+[(Windows/Linux)或Cmd+Shift+[(macOS),所有选中行各自折叠其所属块
注意:该操作要求每个匹配行确实处于可折叠结构的起点(比如 def 行必须带冒号且后接缩进块),否则折叠会失败或只折空行。
用正则定义自定义折叠区域(如 // region)
Sublime 原生不识别 // region 这类注释标记,但可通过修改语法文件注入正则规则实现——这不是设置项,而是直接改 .sublime-syntax 文件中的 contexts。
以 Python 为例,生效路径如下:
- 进入
Preferences → Browse Packages → Python,找到Python.sublime-syntax - 复制该文件到
Packages/User/目录下(不要直接改原文件) - 在
contexts下添加两段 rule:
- match: '#\s*region\b'
push:
- meta_scope: meta.region.python
- match: '#\s*endregion\b'
pop: true
重启 Sublime 后,# region utils 和 # endregion 之间的代码即可被 Ctrl+Shift+[ 折叠。关键点: 防止误匹配 my_region_var,meta_scope 名称必须含语言后缀(如 .python),否则可能跨语言误触发。
CodeFold 插件里改正则来适配私有 DSL 或新语法
CodeFold 是唯一稳定支持运行时正则折叠导入/包含语句的插件,它的规则存在 Packages/CodeFold/folds.json 中,格式为键值对:"^s*#include": "c"。你可以直接加新规则适配内部 DSL。
常见适配场景:
- 自定义配置文件(如
.conf)中以section:开头的块:"^section:\s*$": "yaml" - 模板语言中
{% block header %}类型标签:"^{%\s+block\s+[^}]+%}$": "html" - 注意:匹配行必须是完整逻辑块起点,不能是中间行;值字段(如
"yaml")仅用于关联语法作用域,不决定折叠行为
改完保存即生效,无需重启。但若文件未被正确识别为对应语言(比如 .conf 被当成 Plain Text),规则不会触发——先在右下角手动切换语法。
正则折叠易踩的三个坑
用正则辅助折叠看似灵活,但实际容易因边界条件失效。最容易忽略的是作用域与光标位置的双重绑定——正则只是帮你“找出行”,真正触发折叠还得满足 Sublime 的底层机制。
-
^def匹配成功,但光标不在该行首字符上(比如开头有空格或注释),Ctrl+Shift+[仍不响应 - 正则写成
def.*:会跨行匹配,导致选中范围错位;必须用^defs锁定行首 - 在多光标编辑状态下执行
Ctrl+Shift+[,只有主光标所在行触发折叠,其余光标被忽略
真正卡住人的,往往不是正则写不对,而是忘了 Sublime 折叠永远需要「光标落在起点行 + 作用域已识别」这两个前提。正则只是把人肉查找自动化了一步,没跳过底层约束。











