Sublime中Ctrl+Shift+[对多行数组无效,因其语法定义未标记[]为可折叠结构;唯一可靠方法是选中后用fold_selection强制折叠,不依赖语法识别且100%可控。

Sublime 折叠多行数组为什么 Ctrl+Shift+[ 没反应
因为 Sublime 默认不把 JSON 或 Python 中的多行数组识别为可折叠结构——它只认语法定义中明确标记了 foldingStartMarker 的块,比如 {}、[](仅部分语言)、def、class 等。Python 的 .sublime-syntax 文件默认没给 [] 块加折叠规则;JSON 作为纯数据格式,原生语法包甚至不带任何 folding 配置。
手动选中后用 fold_selection 强制折叠
这是最稳、零配置、100% 可控的方式,不依赖语法识别,也不挑语言:
- 鼠标拖选整个多行数组(从
[开始,到匹配的]结束) - Windows/Linux 按
Ctrl+Shift+Alt+[,macOS 按Cmd+Ctrl+Option+[ - 左侧 gutter 立刻出现独立三角图标,点击即可展开/收起
- 该折叠仅存于当前会话,关闭文件即消失;
Ctrl+K, Ctrl+J不会影响它
让 JSON 或 Python 数组自动可折叠的临时方案
如果频繁操作多行数组,可绕过语法限制,用 Sublime 原生支持的注释标记:
- 在数组前后加
<!-- fold -->和<!-- endfold -->(适用于 HTML、JS、Python 等支持该标记的语言) - 或改用 Python 的条件包裹:把数组写成
if False:块内,Sublime 默认识别if为可折叠结构 - 注意:
#region注释在 Sublime 原生不生效,除非你手动修改.sublime-syntax文件并添加fold: true规则——但每次升级语言包可能被覆盖,且易导致高亮异常
为什么 fold_by_level 和 fold_all 对数组无效
fold_by_level 和 fold_all 都依赖语法作用域嵌套深度(scope level),而多行数组在 Python/JSON 中通常被解析为单个 source.python 或 source.json 作用域,内部没有层级划分。所以:
-
Ctrl+K, Ctrl+0不会折叠数组,哪怕它跨了 50 行 -
Ctrl+K, Ctrl+1或fold_by_level 2同样静默失败 - 验证方式:光标停在数组第一行,按
Ctrl+Shift+P→ 输入Developer: Show Scope Name,若输出里不含meta.array或类似作用域,说明语法层根本没把它当结构看待
真正能立刻收起多行数组的,只有 fold_selection —— 它不分析语法,不校验括号匹配,只认你选中的那几行。别等“自动识别”,选中就折,是 Sublime 在这类场景下最诚实的解法。

















