shift+alt+f(windows/linux)或 shift+option+f(macos)仅在语言模式为 json 或 xml 时生效;json 依赖内置支持但需确保 json.format.enable 为 true 且模式正确,xml 则必须安装扩展(如 red hat xml)并启用 xml.format.enabled。

直接按 Shift+Alt+F(Windows/Linux)或 Shift+Option+F(macOS)就能触发格式化,但前提是 VSCode 能识别当前内容为 JSON 或 XML —— 否则快捷键无效,这是绝大多数人卡住的第一步。
为什么 Shift+Alt+F 没反应?语言模式没对上
VSCode 不是“看到花括号就格式化”,它严格依赖当前编辑器的语言模式。如果右下角显示的是 Plain Text、JavaScript 或 HTML,哪怕你打开的是 config.json 文件,也可能不生效。
- 检查右下角状态栏,确认显示为
JSON或XML;如果不是,点击它 → 输入json或xml→ 回车选择对应模式 - 临时粘贴的 JSON 字符串(比如从 curl 响应里复制的
{"id":1,"name":"test"}),默认是Plain Text,必须手动切语言模式,否则快捷键完全不响应 - XML 文件若后缀不是
.xml(比如web.xml但被识别为Text),同样需要手动切换,VSCode 不靠文件名猜语言
JSON 格式化:内置够用,但得关掉干扰项
VSCode 自带 JSON 支持,无需插件即可完成基础美化,但几个默认设置容易导致意外行为:
-
json.format.enable必须为true(默认开启,但团队共享 settings.json 时可能被覆盖) - 如果装了多个格式化器(如 Prettier、JSONTools),
Shift+Alt+F可能弹出选择框;此时选vscode-json(内置)最稳,避免因插件 parser 解析失败而报错 - 含注释的 JSON(如
{/* comment */ "key": "value"})会被拒绝格式化 —— 必须切换语言模式为JSONC(JSON with Comments) - 缩进宽度由
editor.tabSize控制,和json.format.indent无关;后者只影响数组/对象换行缩进逻辑,日常不用动
XML 格式化:依赖扩展,且需显式启用
VSCode 内置不支持 XML 格式化,Shift+Alt+F 对纯 XML 文件默认无效 —— 这是和 JSON 最关键的区别。
- 必须安装扩展,推荐
Red Hat XML(官方维护,稳定性高)或Auto Rename Tag(附带基础格式化) - 安装后仍需在
settings.json中启用:"xml.format.enabled": true - XML 文件中若混有 CDATA 或处理指令(如
<?xml version="1.0"?>),部分插件会跳过格式化;遇到时可先删掉声明行,格式化完再补回 - 属性分行(
splitAttributes)是可选项,默认关;如需每个属性独占一行,加配置:"xml.format.splitAttributes": true
真正容易被忽略的点是:JSON 和 XML 的格式化机制完全不同——前者靠语言服务内置,后者靠扩展注入;一个切对模式就能用,另一个不装插件就真的一键失效。别指望快捷键“自动适配”,它只认当前语言模式和已启用的格式化器。











