Sublime Text 原生不支持 XML 格式化,因其语法文件未定义 indent_rules,Reindent 等命令对 XML 无效;唯一原生替代是临时切为 HTML 模式再 Reindent,但仅适用于良构且无命名空间或 CDATA 的 XML。

Sublime Text 原生不支持 XML 格式化,Ctrl+Shift+P 里搜不到 XML Pretty Print 或类似命令——这不是你操作错了,是它真没这个功能。
为什么原生菜单里找不到 XML 格式化选项?
Sublime Text 的原生语法高亮和折叠逻辑能识别 XML,但格式化(indent / reflow / pretty-print)属于编辑行为,需要调用外部工具或插件逻辑。官方从未内置 XML 自动缩进规则,Indentation 菜单下的 Reindent 对 XML 文件完全无效,甚至可能把整个文档压成一行。
Reindent 为什么对 XML 失效?
该命令只作用于 Sublime 认为“可推断缩进结构”的语言(如 Python、JS),依赖 .sublime-syntax 中定义的 indent_rules。XML 语法文件(XML.sublime-syntax)里没有配置这些规则,所以:
-
Ctrl+Alt+[或Ctrl+Alt+]不会调整层级 -
Edit → Line → Reindent执行后无变化,或报错Unable to indent line - 手动
Tab/Shift+Tab只影响当前行,无法批量对齐嵌套节点
唯一可行的原生替代方案:用 HTML 模式骗过 Sublime
前提是你的 XML 是良构的(well-formed),且不含自定义命名空间或 CDATA 块等 HTML 解析器不认的内容。HTML 模式有完整缩进规则,可以临时“冒充”处理:
- 按
Ctrl+Shift+P,输入Set Syntax: HTML,回车切换语法模式 - 全选内容(
Ctrl+A),再执行Ctrl+Shift+P→ 输入Reindent,回车 - 再切回
Set Syntax: XML,此时标签已按层级缩进,但属性可能被重排(如换行、引号风格变化)
注意: 可能变成 attr="val">,这不是 bug,是 HTML 缩进器的副作用。
如果 XML 含特殊字符或命名空间,必须放弃原生方式
比如出现 或 ,HTML 模式会误判结构,导致缩进错乱甚至破坏内容。此时:
-
Reindent可能漏掉子节点,或把缩进到错误层级 - 原生「查找替换」写正则也极难覆盖所有嵌套场景(XML 不是正则友好型结构)
- 真正可靠的格式化必须依赖外部工具,例如命令行用
xmllint --format或python -m xml.etree.ElementTree加管道,再绑定到 Sublime 的Build System
所谓“不装插件”,不等于“不用外部程序”——Sublime 的原生能力边界就在这里,硬扛只会浪费时间调正则。










