fold_selection 是唯一能折叠任意选区的命令,它绕过语法识别与缩进校验,仅依赖用户选区;需启用 fold_buttons 才显示 gutter 折叠图标,且折叠状态不持久、不参与语义操作。

fold_selection 是唯一能折叠任意选区的命令
Sublime 原生不支持“选中几行就折几行”,Ctrl+Shift+[ 只响应语法结构起点(如 def 行),不是选区操作。真正能绕过语法识别、缩进校验、作用域标记限制的,只有 fold_selection 命令。
- Windows/Linux:鼠标选中任意连续多行 → 按
Ctrl+Shift+Alt+[ - macOS:鼠标选中 → 按
Cmd+Ctrl+Option+[ - 折叠后,左侧 gutter 立即出现独立三角图标,点击即可展开/收起
- 该折叠仅存在于当前会话,关闭文件即丢失,不写入磁盘,也不影响其他自动折叠块
为什么 fold_selection 有时没反应?
它不依赖语法,但受 UI 层控制——如果侧边栏根本没显示折叠按钮,fold_selection 成功执行后也不会出现可点击图标,看起来就像“没生效”。
- 检查用户设置:
Preferences → Settings右侧必须含"fold_buttons": true - 若已启用但图标仍淡出或不可见,加一行
"fade_fold_buttons": false - 某些插件(如旧版 Vue 或 BracketHighlighter)会覆盖该设置,临时禁用插件后验证
- 注意:这不是快捷键冲突问题,而是 UI 渲染开关被关了
fold_selection 和语法折叠共存时的行为
手动折叠和自动折叠(Ctrl+Shift+[ 或 fold_by_level)互不影响,但展开逻辑有差异:
-
Ctrl+K, Ctrl+J(unfold_all)只还原语法级折叠,不会展开fold_selection创建的区域 - 必须单独点击 gutter 三角图标,或用
unfold命令(需手动绑定快捷键) - 若同时存在多层折叠,鼠标悬停在手动折叠标记上,显示的行号是原始行号,跳转后光标落在折叠行首,而非你记忆中的某行
- 查找替换(
Ctrl+H)默认不跨fold_selection区域匹配,需勾选 Find in folded lines
替代方案:用注释标记实现持久化折叠
如果需要关闭文件后仍保留折叠状态,fold_selection 不适用。此时可借助语言支持的折叠标记,但仅限部分语法:
- JavaScript/HTML/Python 中插入:
<!-- fold -->和<!-- endfold --> - 保存后 Sublime 会识别为可折叠区域,重启后依然有效
- JSON、YAML、纯文本等不支持该机制,强行添加注释无效
- 标记必须独占一行,且不能嵌套;若语法包未定义
fold_comments规则,该功能直接不可用
真正容易被忽略的是:fold_selection 折叠后,它完全脱离语法作用域体系——这意味着 goto_definition、符号搜索、批量替换等行为都不会自动感知其内部内容,除非你主动展开。它是个干净利落的视觉遮罩,不是语义分组。











