VSCode XML格式化不生效需手动启用,关键配置是"xml.format.enabled": true和"xml.format.splitAttributes": true,安装Red Hat XML扩展并设置"[xml]": {"editor.formatOnSave": true}。

VSCode格式化不生效,先确认是否启用了XML格式化引擎
很多情况下你以为点了“格式化文档”或按了 Shift+Alt+F 就该起作用,结果标签没缩进、属性还挤在一行——根本原因是 VSCode 默认不启用 XML 格式化,必须手动开启。它不像 JavaScript 那样自带基础格式器,XML 完全依赖扩展和显式配置。
检查点:
– 是否安装了 Red Hat XML Language Support(当前最稳定、支持 xml.format.splitAttributes 的扩展)
– 设置中是否启用了 "xml.format.enabled": true
– 工作区或用户 settings.json 里有没有被其他插件(如 Vetur、Prettier)覆盖掉 XML 的格式化默认行为
常见错误现象:右下角语言模式显示为 XML,但执行格式化后无任何变化;或者只缩进了嵌套结构,属性依然粘连。
属性不换行?关键看 xml.format.splitAttributes 和 xml.format.wrapAttributes
这两个配置常被混淆,但作用完全不同:
– xml.format.splitAttributes 是 VSCode 内置 XML 格式器的开关,设为 true 表示「每个属性强制独占一行」,最接近“整齐对齐”的效果
– xml.format.wrapAttributes 来自 XML Tools 扩展,值为 "force" 或 "force-aligned",后者会把等号对齐(但实际兼容性差,容易崩)
实操建议:
– 优先用 Red Hat XML + "xml.format.splitAttributes": true,简单可靠
– 别混用 XML Tools 的 wrapAttributes,它和 splitAttributes 冲突,且不读取 .editorconfig
– 如果你用 Prettier(通过 prettier-plugin-xml),那要配 "xmlAttributeNewline": true,但注意它不控制缩进风格,需额外配 "tabWidth"
格式化后属性对不齐?不是 bug,是设计如此
VSCode 原生 XML 格式器(包括 Red Hat 插件)**不提供属性值对齐功能**,比如:
<user id="123" name="John Doe" email="john.doe@example.com" role="admin"></user>
它只会保证每行一个属性,但不会把 = 对齐成一列。这是有意为之:W3C 规范不要求、解析器也不依赖空白格式,对齐纯属视觉优化,容易在协作中引发无意义 diff。
如果你真需要等号对齐:
– 放弃 VSCode 内置格式器,改用 prettier-plugin-xml 配合 "xmlWhitespaceSensitivity": "strict"(仍有限制)
– 或用外部工具如 xmlstar + 自定义脚本后处理
– 切勿依赖 xml.format.indentAttributes,这个配置项在最新版 Red Hat 插件中已被废弃,设了也无效
保存时格式化失效?检查 editor.formatOnSave 和语言绑定
即使所有 XML 配置都对,editor.formatOnSave 默认只对部分语言生效。XML 不在白名单里,必须显式指定:
在工作区或用户 settings.json 中加这两项:
– "editor.formatOnSave": true
– "[xml]": { "editor.formatOnSave": true }
否则:你手动格式化能动,但 Ctrl+S 保存就原地不动。
另外注意:如果项目里有 .vscode/settings.json,它会覆盖用户设置,务必检查是否被意外禁用了 formatOnSave。
最容易被忽略的一点:某些团队用 Prettier 管理全部语言格式,但忘了给 XML 指定格式化器。此时需加:"[xml]": { "editor.defaultFormatter": "esbenp.prettier-vscode" },并确保已装 prettier-plugin-xml。











