CodeFold和fold_by_level是Sublime中真正解决import/region/自定义块折叠的两个稳定插件:前者基于正则自动折叠导入语句,后者通过等注释手动标记折叠范围。

哪些插件能真正解决 import / region / 自定义块折叠
原生 Sublime 对 #region、// region、import 块这类结构完全不识别,必须靠插件补足。目前稳定可用且维护活跃的只有两个:
-
CodeFold:专注导入/包含语句折叠,支持 Python(import/from ... import)、JS(import/require)、C/C++(#include),规则写在Packages/CodeFold/folds.json里,可自由增删正则,比如加"^\s*#include\s+[ 区分系统头和本地头 -
HTML-CSS-JS Prettify:不是为折叠而生,但启用了enable_fold_scripts后能让<script></script>和内容按 JS/CSS 语法折叠——这对 Vue/Svelte 单文件组件很实用,否则 script 块默认是平铺的
别装 AdvancedNewFile 或旧版 CodeFolding:前者已停止更新,后者会覆盖原生 fold 命令,导致 Ctrl+Shift+[ 在函数体上失效;BracketHighlighter 默认不干预折叠,但若开启了 bracket_highlighter.fold_enabled,它会强制用缩进折叠,把 fold_level 完全忽略。
不用插件时,怎么让 #region 生效
想零依赖实现注释标记折叠,唯一可靠路径是改语法定义文件,不是改用户设置。以 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+[ 折叠了。注意:\b 是词界符,防止匹配到 my_region_var;meta_scope 名称要带语言后缀,否则其他语法可能误触发。
fold_selection 是最不该被忽略的手动折叠方式
当你面对一段 JSON 配置、大段日志输出、或临时注释掉的测试代码,又不想改语法或装插件,fold_selection 是唯一不挑文件类型、不依赖语法解析的方案:
- 鼠标拖选或多行选中(
Ctrl+L连续选行) - 按
Ctrl+Shift+[(Windows/Linux)或Cmd+Shift+[(macOS) - 折叠后,光标移到行号左侧 ▶ 上按
Enter可展开;再次按快捷键会尝试向上扩展折叠范围(比如从 5 行扩到包含其父级的 8 行)
这个命令不读取任何 fold_level 或 fold_flags,纯粹按行号区间操作。但它有个硬限制:不能跨空行折叠——如果选中区域中间有空行,Sublime 会只折第一段连续非空行。
为什么 fold_all 没反应,或只折了一层
fold_all 不是“全折叠”,而是按层级逐次执行。它的行为取决于当前视图的 fold_level 设置和语法定义中的 fold_level 值:
-
fold_all快捷键是Alt+0(数字零),按一次 ≈ 折到 level 1(如所有class、def);再按一次 ≈ 折到 level 2(如内部的if、for);第三次才可能达到语法定义允许的最大深度 - 如果某语言语法包没声明
fold_level(比如某些老旧的 Vue 语法),fold_all就只会按缩进折,且最多折 4 层(默认值),此时需在Preferences → Settings – Syntax Specific中加"fold_level": 6 -
unfold_all(Alt+1)只会展开被fold_all折叠的部分,对fold_selection折叠的区域无效——得单独点开或重复按Ctrl+Shift+]
真正容易被忽略的是:折叠状态基于行偏移计算,一旦你在已折叠区域上方插入新行,折叠锚点就会错位,导致展开后光标跳到奇怪位置。稳妥做法是——先保存文件,再折叠。











