XML缩进不生效需依次检查:是否启用redhat.vscode-xml扩展并设为默认格式化器;确认语言模式为XML而非Plain Text或HTML;正确配置"xml.format.indentSize"为正整数且禁用"xml.format.preserveComments"。

XML formatter 缩进不生效?先确认用的是哪个 formatter
VS Code 默认不带 XML 格式化能力,你看到的格式化行为几乎一定来自某个扩展(比如 redhat.vscode-xml 或 bradlc.vscode-tailwindcss 顺带处理 XML)。缩进设了没反应,大概率是格式化器根本没启用或被其他扩展覆盖。
检查方法:Ctrl+Shift+P → 输入 Format Document With... → 看当前默认项是不是你装的 XML 扩展。如果不是,选中它并点击 Configure Default Formatter... 设为默认。
-
redhat.vscode-xml是目前最主流、对缩进控制最细的 XML 扩展 - 别用
esbenp.prettier-vscode格式化 XML——它对 XML 支持极弱,prettier本身不原生支持 XML - 如果同时装了多个 XML 相关扩展(比如还装了
dotjoshjohnson.xml),冲突概率高,建议只留redhat.vscode-xml
redhat.vscode-xml 的缩进配置项名是 xml.format.splitAttributes?错,那是换行开关
真正控制缩进空格数的是 xml.format.indentSize,不是 splitAttributes。后者只决定属性是否每行一个,和空格数量完全无关。
这个配置必须写在工作区或用户设置里(JSON 格式),UI 设置里搜不到它:
{
"xml.format.indentSize": 2
}- 值只能是正整数,比如
2、4,不能是"2"(字符串会失效) - 如果项目根目录有
.vscode/settings.json,优先级高于全局设置,改这里更稳妥 - 改完不用重启 VS Code,但要对未保存的 XML 文件先
Ctrl+S再Shift+Alt+F触发格式化才生效
格式化后缩进还是不对?检查文件关联和语言模式
VS Code 按「语言模式」决定用哪套格式化规则。哪怕文件后缀是 .xml,如果右下角显示的是 Plain Text 或 HTML,xml.format.* 配置就完全不加载。
手动修正方式:点击右下角语言标识 → 输入 xml → 选 XML(注意不是 XML (Legacy))。
- 临时解决:打开 XML 文件后按
Ctrl+K Ctrl+M,再输入xml回车 - 一劳永逸:在
settings.json加上"files.associations": {"*.xsd": "xml", "*.wsdl": "xml"},避免某些非.xml后缀的 XML 文件被误判 - 如果文件里有
<?xml version="1.0"?>但依然识别失败,可能是 BOM 或开头空白干扰,删掉首行前不可见字符再试
缩进生效了,但嵌套标签换行混乱?关掉 xml.format.preserveComments
这个选项默认为 true,看起来是保注释,实际会让 formatter 在注释前后强行插入空行、打乱缩进节奏,尤其在 <!-- > 包裹子元素时表现明显。
如果你不需要严格保留原始注释位置,建议显式关掉:
{
"xml.format.indentSize": 2,
"xml.format.preserveComments": false
}- 关掉后注释会随内容一起缩进,视觉更统一
- 开启动态格式化(
editor.formatOnSave)时,preserveComments: true容易导致保存一次缩进正常、再保存一次又多缩进一层 - 这不是 bug,是
redhat.vscode-xml基于 Eclipse Xerces 的解析策略——它把注释当独立节点处理,缩进逻辑和元素不同
XML 格式化真正的麻烦点不在缩进数字本身,而在于「谁在格式化」「按什么语言模式格式化」「注释和 CDATA 怎么穿插」——这三个地方卡住,调一百遍 indentSize 都没用。










