sublime text格式化xml需装插件,推荐xml tools(开箱即用但须确认语法为xml且编码为无bom utf-8)或indent xml(需手动配快捷键、不校验语法),大文件建议用xmllint外部构建。

Sublime Text 本身不支持 XML 格式化,必须装插件;XML Tools 是目前最稳定、开箱即用的选择,Indent XML 需手动配快捷键且缩进策略不可调。
XML Tools 安装后默认就能用,但得先确认语法和编码
装完 XML Tools 插件(通过 Package Control → Install Package → XML Tools),别急着按快捷键。先看右下角状态栏是否显示 XML —— 如果是 Plain text 或 HTML,点它手动切过去,否则格式化会静默失败。
编码必须是无 BOM 的 UTF-8:菜单 File → Reopen with Encoding → UTF-8,再 File → Save with Encoding → UTF-8。带 BOM 或 GBK 编码的文件一格式化就报 UnicodeDecodeError 或中文变问号。
常见卡点:
- 文件里有裸露的
&(没写成&)、控制字符(如\x00)、未闭合标签,XML Tools会直接弹窗报XML Parse Error,不格式化也不提示具体哪一行 - 大文件(>2MB)容易卡死,建议先复制内容到新窗口再操作
- 格式化后注释位置可能偏移、
CDATA块会被自动展开,这些行为无法关闭
Indent XML 必须手动绑定快捷键,且不校验语法
Indent XML 插件装完默认没快捷键,也不会出现在右键菜单或命令面板里。必须手动编辑快捷键配置:
打开 Preferences → Package Settings → Indent XML → Key Bindings – User,填入:
[{"keys": ["ctrl+alt+i"], "command": "indent_xml"}]
macOS 用户把 ctrl 换成 super(即 ["super+alt+i"])。
它不检查 XML 合法性,只做机械缩进。所以:
- 遇到
xml.parsers.expat.ExpatError: not well-formed (invalid token),说明文件本身有硬伤,不是插件问题 - 缩进固定为 2 空格,不能设 4 空格,也不能保持单行标签(如
<img src="x">会被拆成多行) - 如果快捷键没反应,先按
Ctrl+Shift+P输入Indent XML,看命令是否出现;没出现就是插件没加载成功
用 xmllint 做外部构建,适合需要稳定性和错误定位的场景
系统装了 xmllint(macOS 用 brew install libxml2,Windows 下需把 xmllint.exe 加入 PATH),就可以绕过插件依赖,更可靠:
新建 Build System:Tools → Build System → New Build System,粘贴:
{
"cmd": ["xmllint", "--format", "--encode", "UTF-8", "$file"],
"selector": "text.xml",
"file_regex": "^.*:([0-9]+):([0-9]+):"
}
保存为 XML Format.sublime-build,之后在 XML 文件里按 Ctrl+B 就能格式化,错误行号也会高亮标出。
注意:
-
xmllint遇到 DTD 或 XSD 引用失败时会直接退出,不是所有 XML 都能“无脑格式化” - 它不处理编码声明不一致的问题,得自己确保文件实际编码和
<?xml version="1.0" encoding="UTF-8"?>匹配 - 比插件慢一点,但对大文件更稳,5MB+ 的 XML 也能跑
格式化前最容易被忽略的三件事
不是快捷键按错,也不是插件装错,而是这三点常被跳过:
- 没确认右下角语法标识是
XML,而是靠文件后缀判断——后缀是 .xml,但 Sublime 可能仍当它 plain text 解析 - 文件编码和 XML 声明里的
encoding属性不一致,比如声明是GBK,实际存的是UTF-8,格式化后中文全乱 - 误以为格式化 = 校验,其实
XML Tools和Indent XML都不报标签嵌套错误,得另配SublimeLinter-contrib-xml或用在线工具交叉验证








