Sublime Text的多光标无法批量格式化JSON,因其格式化命令仅作用于首个光标所在作用域;可行方案包括分段处理、正则提取后美化或导出至终端用python -m json.tool。

多光标本身不能直接格式化JSON
Sublime Text 的多光标(Ctrl+Click 或 Ctrl+D)只是选中多个位置,它不触发任何格式化逻辑。你按 Ctrl+Alt+J 或其他快捷键时,实际执行的是当前语法模式下绑定的命令——而该命令只对**当前光标所在作用域**生效,不会批量处理所有多光标选区。强行多选后按格式化键,通常只有第一个光标位置的内容被处理,其余光标被忽略或导致报错。
想批量处理多个JSON片段?得换思路
如果你有一堆零散的 JSON 字符串(比如日志里夹杂的响应体、调试打印的多段对象),靠多光标 + 格式化快捷键走不通。可行路径只有两条:
- 把每段 JSON 单独切出来:复制 → 新建文件 → 粘贴 → 右下角手动切为
JSON语法 → 按Ctrl+Alt+J→ 再复制回原处 - 用正则 + 命令面板批量提取:先
Ctrl+H打开替换面板,用类似\{[^{}]*\}(简单场景)或更健壮的 JSON 匹配正则定位片段,勾选. matches newline,全部替换为带换行包裹的格式(如\n$0\n),再逐个用鼠标双击选中每个块,然后用Ctrl+Shift+P→ 输入Pretty JSON: Beautify执行 - 别硬扛,导出到终端:选中所有 JSON 片段 →
Ctrl+Shift+P→Copy as Plain Text→ 粘到临时文件 → 终端跑python -m json.tool temp.json,再复制回来
为什么“多光标+格式化”会静默失败
根本原因在 Sublime 的命令上下文(context)机制。像 pretty_json 这类命令默认只在 source.json 作用域激活,而多光标选区一旦跨出 JSON 语法范围(比如混着日志文本),命令就完全不可见;即使全在 JSON 文件里,插件内部也只取第一个选区做解析,其余被丢弃——不会报错,也不会提示,这就是所谓“静默失败”。
另外注意:JSON Reindent 更极端,它连基本校验都没有,遇到多光标里的非法片段(如单引号、尾随逗号),可能直接崩溃或输出乱码,而不是跳过。
真正省事的做法:用 HTML-CSS-JS Prettify 配合正则预处理
它比 Pretty JSON 更适合批量场景,因为支持 "type": "json" 显式指定格式类型,且能自动修复常见错误(补引号、删单引号、去尾随逗号)。操作链是:
- 确保当前文件编码是
UTF-8(不是UTF-8 with BOM),右下角语言设为Plain Text -
Ctrl+H,正则模式开启,查找:(\{(?:[^{}]|(?R))*\})(需 Sublime Text 4.4+ 支持递归)或保守点用\{[^}]*\}+ 多次执行 - 替换为:
$1
(加围栏方便后续识别) -
Ctrl+Shift+P→HTML-CSS-JS Prettify→ 选JSON类型,它会自动识别代码块并美化
这比折腾多光标快得多,也更可靠。记住:Sublime 的格式化能力本质是“单文档单作用域”的,想突破这个限制,就得靠外部工具或预处理绕过去。











