VSCode JSON格式化快捷键失效主因是语言模式未识别为JSON,需检查右下角状态栏并手动设为JSON模式;压缩JSON须禁用格式化并配合正则替换或扩展;Prettier接管时需调整printWidth或切换默认格式化器。

JSON格式化快捷键不生效?先确认编辑器是否识别为JSON语言模式
VSCode默认对.json后缀文件自动启用JSON语言模式,但如果你打开的是config.json5、.env.json或无后缀的配置片段,它可能被识别为plaintext或jsonc,导致Shift+Alt+F(Windows/Linux)或Shift+Option+F(macOS)无法触发格式化。
检查右下角状态栏:显示“JSON”才有效;若显示“Plain Text”,点击它 → 选择“Configure File Association for '.xxx'” → 设为JSON。也可手动触发:按Ctrl+K Ctrl+M(Windows/Linux)或Cmd+K Cmd+M(macOS),输入json回车。
- 不要依赖文件名——
package.json若被重命名为pkg.conf,VSCode不会自动识别 -
jsonc(带注释的JSON)支持格式化,但部分旧版插件可能跳过注释行,建议统一用JSON模式处理纯配置 - 远程开发(WSL/SSH)中,格式化依赖远程端安装的
prettier或内置JSON formatter,本地设置不生效
压缩JSON时丢失换行和缩进?别用“格式化”,要用“保存时自动压缩”
VSCode原生没有“一键压缩JSON”命令,所谓“压缩”本质是关闭格式化、移除空白符。直接按格式化快捷键只会美化,不会变单行。
正确做法是:在当前JSON文件的settings.json(工作区级优先)中添加:
{
"[json]": {
"editor.formatOnSave": false,
"editor.insertSpaces": false,
"editor.tabSize": 0,
"editor.formatOnType": false
}
}
再配合手动操作:Ctrl+A全选 → Ctrl+Shift+P → 输入Remove All New Lines(需安装扩展如String Manipulation)或使用正则替换:\s+ → 替换为空字符串(勾选“正则表达式”和“全部匹配”)。
- 不要在用户级
settings.json全局关掉formatOnSave——会影响其他语言 - 压缩后的JSON无法直接阅读,建议仅用于部署前生成
dist/config.min.json,保留原始文件可读性 - 某些CI流程要求压缩JSON必须无尾逗号,而VSCode格式化默认保留,需额外校验
为什么Shift+Alt+F有时只缩进不换行?检查是否启用了Prettier覆盖
如果你装了Prettier插件且设置了"editor.defaultFormatter": "esbenp.prettier-vscode",它会接管所有格式化行为。而Prettier对JSON的默认配置是printWidth: 80,当一行内容未超长时,它就不换行——看起来像“没格式化”。
解决方法分两步:
- 临时禁用:按
Ctrl+Shift+P→ 输入Format Document With...→ 选Configure Default Formatter→ 改为vscode.json-language-features - 长期适配:在项目根目录加
.prettierrc,写入{"printWidth": 0, "tabWidth": 2, "useTabs": false, "singleQuote": false}(printWidth: 0强制换行) - 注意:Prettier 3.0+ 已支持
jsonRecursive选项,但VSCode插件尚未完全透出该能力,慎用
树状视图里点“格式化”按钮没反应?那是vscode-json插件的假按钮
vscode-json插件(ZainChen版)侧边栏的“格式化”图标{} 实际只是刷新树状结构,并不调用编辑器的格式化逻辑。它不会修改代码内容,也不会触发动态格式化快捷键。
真正起作用的只有编辑器内的操作:
- 确保光标在JSON编辑器内(不是树状视图面板)
- 确认文件已保存(未保存的脏文件可能跳过格式化)
- 检查
editor.formatOnSave是否为true且对应语言模式正确 - 如果用了
eslint-plugin-json等校验插件,错误过多时格式化可能被静默拒绝
树状视图的价值不在格式化,而在快速定位字段和批量重命名——别指望它替代Shift+Alt+F。


















