fold_selection 是唯一可靠方案,它绕过语法识别直接按选中范围折叠,不依赖作用域、语言标识或缩进,适用于日志、JSON、Markdown 表格等无语法定义的跨行文本。

fold_selection 是唯一可靠方案
跨行大段文本(比如日志片段、JSON 配置块、Markdown 表格、注释说明)通常没有语法定义的折叠作用域,Ctrl+Shift+[ 会静默失败。这时必须绕过语法识别,直接用 fold_selection 命令——它只看选中范围,不查作用域、不依赖语言标识、不校验缩进。
操作步骤很简单:
- 鼠标拖选或多行选中(
Ctrl+L连续按可逐行追加选中) - 按
Ctrl+Shift+[(Windows/Linux)或Cmd+Shift+[(macOS) - 折叠后左侧 gutter 出现独立三角图标,点击即可展开
注意:这个折叠仅存在于当前会话,关闭文件即消失;不会写入文件,也不受任何语法包影响。
为什么 fold_by_level 和 fold_all 对它完全无效
fold_by_level 和 fold_all 都依赖 syntax definition 中定义的 foldStartMarker 和作用域 scope(如 meta.function.python)。而纯文本段落、JSON 字符串、HTML 注释块等,除非装了专用插件(如 JsPrettier 或 SublimeJEDI),否则 Sublime 默认不给它们标记任何可折叠 scope。
常见误判场景:
- 把一段 JSON 粘贴进
.py文件里,右下角虽显示 Python,但 JSON 不在 Python 语法的 fold scope 规则中 - 在 Markdown 文件里写了一长段 HTML 表格,
Ctrl+K, Ctrl+0只折标题和列表,表格原样不动 - 用
// <!-- fold -->标记但未启用对应插件或语法支持,Sublime 直接忽略
临时补救:用正则批量选中再 fold_selection
如果要折叠的文本有规律(比如所有以 ### DEBUG 开头的段落、或连续 5 行以上的空行分隔块),可以跳过手动拖选,改用正则快速定位:
-
Ctrl+F→ 勾选Regex→ 输入匹配模式(如^### DEBUG.*$\n([\s\S]*?)\n(?=^###|\Z)) - 点
Find All,所有匹配段落被高亮选中 - 直接按
Ctrl+Shift+[,每段都会被单独折叠
这个技巧在处理日志分析、测试输出、文档草稿时特别快,比一行行拖省力得多。
真正容易被忽略的细节
折叠后的文本块,光标一旦移入其中,Ctrl+F 搜索默认不跨折叠区域——你搜不到里面的内容,除非先展开。这不是 bug,是 Sublime 的设计逻辑:折叠即“从视图中移除”。另外,fold_selection 折叠的块不能嵌套(比如先折 1–10 行,再折其中 3–7 行),第二次操作会覆盖第一次,而不是生成子折叠。

















