Shift+Alt+F没反应是因为语言模式非JSON或未启用格式化器;需切换为JSON模式、安装vscode.json-language-features等格式化器,并配置language专属设置。

Shift+Alt+F 按了没反应?先确认语言模式和格式化器
VSCode 本身不带 JSON 格式化引擎,Shift+Alt+F(Win/Linux)或 Shift+Option+F(Mac)只是触发命令的快捷键,背后依赖的是已启用的格式化器。如果按了没反应,大概率不是快捷键失效,而是:
- 右下角语言模式显示为
Plain Text或JavaScript,不是JSON—— 点击右下角文字,选JSON,或用快捷键Ctrl+K M(Win)/Cmd+K M(Mac)快速切换 - 没装支持 JSON 的格式化器,比如
vscode.json-language-features(内置但需启用)或esbenp.prettier-vscode(需手动安装) - 多个格式化器共存时弹出选择框但你没选 —— 首次使用建议在弹窗里勾选“始终使用此格式化器”,避免每次重复操作
选中一段 JSON 字符串却格式化失败?别直接在 JS 文件里硬来
从浏览器控制台复制的 {"user":{"id":1}} 粘贴进 .js 文件后,VSCode 把它当 JS 字面量处理,editor.action.formatSelection 会尝试按 JS 规则格式化,结果往往错乱甚至报错。正确做法是:
- 双击选中 JSON 字符串(含外层大括号),但**不要包含引号或等号**——例如
response.data = {"name":"alice"}中只选{"name":"alice"} - 临时新建一个空白文件 →
Ctrl+K M切成JSON→ 粘贴 →Shift+Alt+F - 如果必须在原文件中操作,可右键选中区域 → “Format Selection with...” → 明确选
JSONTools或jsonc
注意:JSON 不允许注释,含 // 或 /* */ 会直接报 Unexpected token / in JSON,删掉再操作。
想一键搞定保存即格式化?settings.json 里这三行最关键
自动格式化不是开个开关就行,关键在匹配语言和格式化器。项目级配置比用户级更可靠,尤其团队协作时。在项目根目录的 .vscode/settings.json 里写:
{
"[json]": {
"editor.formatOnSave": true,
"editor.defaultFormatter": "vscode.json-language-features",
"editor.tabSize": 2
}
}
说明:
-
"[json]"是语言专属配置块,只对.json文件生效,不影响 JS/TS 文件 -
vscode.json-language-features是 VSCode 内置 JSON 支持,无需额外插件,稳定且轻量 -
tabSize设为2或4取决于团队规范,设false会导致缩进不一致
别把 editor.formatOnSave 放在顶层——那样所有语言都会触发格式化,可能干扰 Python 或 Markdown 的排版逻辑。
自定义快捷键时最常踩的坑:when 条件漏写或写错
想把格式化绑定到 Ctrl+Shift+L?直接在 keybindings.json 里加一条:
[
{
"key": "ctrl+shift+l",
"command": "editor.action.formatDocument",
"when": "editorTextFocus && editorLangId == 'json'"
}
]
重点在 when:
- 漏掉
editorTextFocus→ 快捷键在终端、侧边栏等非编辑器区域也会触发,可能意外格式化终端历史 - 写成
editorLangId == 'javascript'却想用于 JSON → 永远不生效,语言 ID 必须精确匹配(json、jsonc、typescript等) - 多个条件用
&&连接,不能用中文顿号或空格
查语言 ID 最稳的方式:打开 JSON 文件 → Ctrl+Shift+P → 输入 Developer: Inspect Editor Tokens and Scopes → 看右上角显示的 languageId 值。
使用 JSON Schema 验证 JSON 数据,从示例 JSON 生成 schema,并将其转换为 TypeScript 接口、Python 数据类或 Markdown 文档。

















