直接用 fold_selection 是最可靠的方法,因为 Sublime 默认折叠只识别有明确作用域边界的结构(如 def、class、{} 块),不解析数组字面量等值内容;手动选中连续多行后按 Ctrl+Shift+[ 即可强制折叠,不受语法识别限制。

直接用 fold_selection,别依赖语法识别——超长列表(如 JSON 数组、Python 列表字面量、base64 字符串)几乎都不在 Sublime 原生折叠规则里。
为什么 Ctrl+Shift+[ 对列表项无效?
Sublime 的默认折叠只认「有明确作用域边界」的结构:def、class、{} 块、if 语句体等。它不解析值内容,也不把 [...] 或 [1,2,3,...] 当作可折叠单元——哪怕你光标停在 [ 行,只要语法定义没声明该符号为 foldingStartMarker,快捷键就静默失败。
常见现象:
- JSON 文件里写
"items": [1, 2, 3, ..., 999],按Ctrl+Shift+[没反应 - Python 中
data = [ {...}, {...}, ... ],光标在[行却无法折叠 - 右下角显示
JSON或Python,但show_scope_name输出里没有meta.array或meta.list类作用域
手动选中 + Ctrl+Shift+[ 是最稳解法
这是唯一绕过语法解析、缩进校验和折叠规则限制的方式,对任意连续多行都有效。
操作步骤:
- 鼠标拖选整段列表(从
[开始,到对应]结束;或直接框住所有数据行) - 按
Ctrl+Shift+[(Windows/Linux)或Cmd+Shift+[(macOS) - 左侧 gutter 出现独立三角图标,点击即可展开/收起
注意点:
- 选中必须是**连续行**;跨空行会中断,需先合并选区(
Ctrl+L多次选行) - 折叠后状态不保存,关闭文件即重置——这不是 bug,是 Sublime 设计如此
- 若列表嵌套很深(如 JSON 中的数组里还有对象),一次只能折外层;需逐层选中再操作
想长期复用?加 // region 注释包裹
对需要反复折叠的配置列表或测试数据,提前用注释标记可避免每次重选。
示例(Python):
# region mock data
data = [
{"id": 1, "name": "a"},
{"id": 2, "name": "b"},
# ... 50 more items
]
# endregion
前提是已开启 "fold_comments": true(Preferences → Settings – Syntax Specific)。
关键细节:
- Python 必须用
# region,不是// region(后者是非法语法) - JS/JSON/CSS 才用
/* region */风格 - 如果列表本身在函数体内,且函数已被折叠,
region标记可能被忽略——此时仍要靠fold_selection
大文件里找列表起点太慢?用正则快速定位
当列表藏在千行代码中间,又不想滚屏找 [,可用查找功能批量高亮。
操作流程:
-
Ctrl+F打开查找面板 - 输入正则:
\[\s*(?:[^[\]]|\[[^\]]*\])*\.{3}(匹配含...的长列表开头)或更简单的^\s*\[.*\,$(匹配以[开头、逗号结尾的行) - 勾选
Regex和Match case - 点
Find All,所有匹配行被选中 - 按
Ctrl+Shift+[—— Sublime 会对每个选中行触发一次折叠
这个技巧本质是「用正则替代人眼定位」,但最终仍依赖 fold_selection 执行,所以比纯语法折叠更可靠。
最容易被忽略的一点:列表折叠是否生效,和文件大小无关,而和**是否被当作合法语言加载**强相关。哪怕只有 10 行,若右下角显示 Plain Text,所有基于语法的方案都会失效——这时 fold_selection 是唯一活路。

















