Sublime 不支持直接折叠 JavaScript 对象属性,因其语法包未将对象键值层级映射为可折叠作用域;需借助 fold_by_level、手动选区或正则标记等方式实现视觉收起。

Sublime 无法直接“折叠对象属性”——它不识别 JavaScript 对象字面量的 key/value 结构,所谓“深层对象属性折叠”,本质是绕过语法限制,靠作用域层级、选区或正则达成视觉收起效果。
为什么 Ctrl+Shift+[ 对 { a: 1, b: { c: 2 } } 没反应
Sublime 的折叠逻辑基于语言语法包定义的作用域(如 meta.object-literal、meta.block),而非 JSON 或 JS 对象的嵌套深度。JS 语法包默认不把对象属性层级映射为可折叠 scope,所以光标停在 b: 行按 Ctrl+Shift+[ 通常静默失败。
- 确认状态栏显示的是
JavaScript(不是Plain Text或JSON) - 按
Ctrl+Shift+P→ 输入Developer: Show Scope Name,光标在b:行时,若只看到source.js或meta.object-literal但没有更细的meta.object-literal.key,说明语法包未暴露该层级 - 常见干扰:对象跨多行但缩进不一致(空格混 Tab)、属性值含未闭合字符串或注释,会中断作用域链
用 fold_by_level 强制折到对象嵌套层(需实测)
JS 中对象字面量常被归入 meta.object-literal,其嵌套深度取决于外层结构。例如 const obj = { b: { c: 2 } }; 里,最外层 {} 可能是 level 2,内层 { c: 2 } 是 level 3 —— 但这个数字不是固定的,得试。
- 先确保光标停在对象首行(如
const obj = {行),按Ctrl+Shift+[能正常折叠整个对象 -
Ctrl+Shift+P→ 输入fold_by_level→ 回车 → 依次输入2、3、4(JS 文件常见从 3 开始生效) - 若某层没反应,检查是否有装饰器、类型注解(如
const obj: Record)干扰作用域推导= { - 失败时加空行分隔对象块,或把对象提取为独立变量(
const inner = { c: 2 };),再对inner行执行fold_by_level
手动选区折叠最稳:适合临时藏一段配置对象
当语法失效或只想快速收起某几行对象内容时,fold_selection 不依赖任何作用域,只要选中就折。
- 鼠标拖选目标对象的全部行(包括开头
{和结尾},且要选中换行符) - Windows/Linux 按
Ctrl+Shift+Alt+[;macOS 按Cmd+Ctrl+Option+[ - 左侧 gutter 出现独立三角图标,点击即可展开/收起,关闭文件后自动清除
- 注意:别用
Ctrl+L连续选行再折——如果某行末尾有空格或缩进不齐,fold_selection可能只折部分行
正则替换 + 折叠:批量处理 api/用户列表 这类中文路径对象
遇到中英文混排的对象 key(如 {"api/用户列表": {...}, "api/订单详情": {...}}),想统一收起所有 value,不能靠语法折叠,得用文本模式。
-
Ctrl+H打开替换面板 → 勾选.*(正则模式) - 查找:
"api/[^"]+":\s*{→ 替换为:"api/[^"]+": {(仅用于定位,不真替换) - 点
In Selection后按Alt+Enter全选匹配项,此时光标停在每个{前 - 按
Ctrl+Shift+L拆成多光标 → 按End移到每行行尾 → 输入/* folded */作标记,再用Ctrl+Shift+Alt+[折叠这些带标记的行 - 后续展开时,删掉
/* folded */即可恢复原结构
真正难的不是怎么折,而是折完之后怎么快速定位和展开——fold_selection 的折叠标记只在当前视图存在,而语法级折叠(如 fold_by_level)一旦作用域识别错位,展开时可能连不到原始位置。建议对关键对象块,优先用空行+注释(// === API CONFIG ===)做视觉锚点,比纯折叠更可靠。











