Pretty JSON的pretty_on_save配置无效,因其源码未监听保存事件;真正支持JSON自动格式化的方案是JsPrettier(需全局安装prettier CLI并配置绝对路径)或HTML-CSS-JS Prettify(基于js-beautify,无需Node.js,需启用auto_format_on_save并设allowed_file_extensions为["json"])。

Pretty JSON 插件本身不支持保存时自动格式化,它的 pretty_on_save 配置项是假的——插件源码里根本没监听 on_post_save_async 事件,设成 true 也完全没反应。别被文档或旧教程误导。
真正能实现 JSON 保存自动格式化的,只有两类方案:一是用 JsPrettier(靠本地 prettier CLI),二是用 HTML-CSS-JS Prettify(靠内置 js-beautify)。二者行为、依赖、配置逻辑完全不同,混用会冲突。
为什么 Pretty JSON 的 pretty_on_save 不起作用
这个配置字段在插件设置里确实存在,但它是历史残留。从 PrettyJson.py 源码可见,它只响应命令调用(如 pretty_json 命令),没有注册任何保存钩子。你改了 pretty_on_save,重启 Sublime,保存 JSON 文件,控制台不会报错,也不会格式化——就是静默失效。
常见误操作:
- 以为装了插件就自动生效,没检查是否真触发了格式化
- 在
Preferences → Package Settings → Pretty JSON → Settings – User里反复调pretty_on_save,却漏看了插件根本没这能力 - 和
JsPrettier同时装,结果两个插件都抢着处理保存事件,反而互相屏蔽
JsPrettier 配置 JSON 自动格式化的硬性条件
它不是纯 Python 插件,必须调用系统里的 prettier 可执行文件。缺任何一个环节,保存就“看起来没反应”。
- 全局安装
prettier:npm install -g prettier或yarn global add prettier,然后终端运行prettier --version确认有输出 - 查真实路径:
which prettier(macOS/Linux)或where prettier(Windows),得到类似/usr/local/bin/prettier或C:\Users\Alice\AppData\Roaming\npm\prettier.cmd的绝对路径 - 进
Preferences → Package Settings → JsPrettier → Settings – User,粘贴以下内容(注意替换路径):
{
"prettier_cli_path": "/usr/local/bin/prettier",
"auto_format_on_save": true,
"auto_format_on_save_extensions": ["json"],
"auto_format_on_save_excludes": ["*/node_modules/*"]
}
关键点:
-
auto_format_on_save_extensions必须显式包含"json",写成"JSON"或"js"都无效 -
prettier_cli_path必须是绝对路径,不能是"prettier"或留空;ST4 启动时不会继承你的 shellPATH - 如果项目根目录有
.prettierrc,JsPrettier会自动读取,但缩进、单双引号等规则仍以 CLI 实际行为为准
HTML-CSS-JS Prettify 的 JSON 自动格式化配置
它基于 js-beautify,不依赖 Node.js,适合不想装 npm 的场景,但对中文字段值更友好(不易乱码),且能自动修复末尾逗号、单引号等语法问题。
- 先确保 Sublime 状态栏右下角显示的是
JSON(不是Plain text或JavaScript),否则插件不响应 - 进
Preferences → Package Settings → HTML-CSS-JS Prettify → Settings – User,填入:
{
"auto_format_on_save": true,
"allowed_file_extensions": ["json"],
"html": { "indent_size": 2 },
"js": { "indent_size": 2 },
"css": { "indent_size": 2 }
}
注意:
-
allowed_file_extensions是它的字段名,不是auto_format_on_save_extensions - 必须关掉
detect_indentation(在同个设置文件里加"detect_indentation": false),否则缩进会在 2/4 空格间跳变 - 它不读
.prettierrc,所有规则都在插件设置里硬编码,比如中文字段值不会转成\u4f60\u597d,前提是文件本身编码是 UTF-8(推荐设default_encoding为"UTF-8")
保存后没反应?先查这三件事
90% 的“不工作”不是插件坏了,而是环境没对齐:
- 打开 Sublime 控制台(
View → Show Console),保存 JSON 文件,看有没有JsPrettier: Error或html_css_js_prettify: failed to format类报错;没有报错≠成功,可能连 CLI 都没调起来 - 确认你用的是终端启动的 Sublime(
subl .),而不是桌面图标双击——后者不继承 shell 的PATH和环境变量,which prettier有结果,subl却找不到 - 检查文件是否真被识别为 JSON:选中任意一行,按
Ctrl+Shift+P输入Set Syntax: JSON,手动切一次语法类型,再试保存
最易忽略的一点:Sublime 的 JSON 自动格式化永远只作用于当前视图的主文件(即标签页里打开的那个),不会递归处理 require('./config.json') 这类导入的外部文件——那是构建工具的事,编辑器管不了。











