VSCode默认不支持XML格式化,需安装XML Tools插件;它轻量稳定、保留注释与CDATA、不重排属性,推荐用于.config等配置文件,避免使用Prettier处理XML。

XML格式化在VSCode里默认不工作
VSCode自带的XML支持(通过内置的XML Language Features扩展)只提供基础语法高亮和简单验证,不启用自动缩进、标签对齐或格式化命令。按Shift+Alt+F或右键“格式化文档”时,通常会提示“没有可用的格式化程序”,或者直接无反应——这不是你配置错了,是它本来就不支持。
必须手动安装并启用第三方格式化器,且需注意:VSCode对XML没有统一的格式化标准,不同插件行为差异大,容易出现换行错乱、属性挤成一行、CDATA块被破坏等问题。
推荐用 XML Tools 插件做基础格式化
目前最稳定、轻量、适配VSCode原生体验的是XML Tools(作者:Josh Johnson)。它不依赖外部服务或语言服务器,纯前端处理,适合.xml、.config、.xsd等常见配置类XML文件。
- 安装后,默认绑定
Ctrl+Shift+I(Windows/Linux)或Cmd+Shift+I(macOS)为“格式化XML”快捷键 - 支持缩进宽度自定义:
xmlTools.format.indentSize(默认2),可在settings.json里改 - 对
<!-- comment -->和保留原样,不破坏内容 - 不重排属性顺序,也不自动换行长属性值——这点反而是优势,避免把
xmlns等关键声明拆散
示例:原始混乱的web.config片段
<configuration><appSettings><add key="LogLevel" value="Warning"/><add key="ApiUrl" value="https://api.example.com/v1"/></appSettings></configuration>
格式化后变成:
<configuration>
<appSettings>
<add key="LogLevel" value="Warning"/>
<add key="ApiUrl" value="https://api.example.com/v1"/>
</appSettings>
</configuration>别用 Prettier 格式化XML
Prettier本身不支持XML;即使装了prettier-plugin-xml,也会频繁出问题:比如把<node></node>自闭合标签强行展开成<node></node>,或错误合并相邻文本节点。更麻烦的是,它会尝试格式化XSLT、SOAP响应体这类含嵌入式JS/HTML的XML,导致语法失效。
真实踩坑场景:
- Spring Boot的
application.xml被Prettier处理后,<bean class="com.example.X"></bean>里的class值被截断换行 - WCF配置中
<binding name="BasicHttpBinding_IMyService"></binding>被拆成多行,IDEA或msbuild报“无效XML” - VSCode设置
"editor.defaultFormatter": "esbenp.prettier-vscode"后,所有XML文件都走Prettier流程,无法单独关闭
复杂XML(如XSD、SOAP)建议关掉自动格式化
Schema定义文件(.xsd)或带命名空间、xs:annotation、xs:appinfo的XML,XML Tools也可能误判层级。此时手动调整比自动格式化更可靠。
做法很简单:
- 在VSCode设置里加一条排除规则:
"[xml]": {"editor.formatOnSave": false} - 需要临时格式化时,选中目标节点(比如只选中
<element></element>块),再按格式化快捷键 - 对含大量
xmlns声明的文件,优先检查xmlTools.format.preserveNamespaces是否为true(默认是)
真正难处理的从来不是缩进,而是命名空间继承关系和schema validity——格式化工具根本不管这些,只管字符排列。一按就崩的,往往不是编辑器不行,是XML本身结构已经模糊了语义边界。


















