Format XML like a pro



Years ago, I wrote about a custom function that uses shell-command-on-region to run xmllint on an XML buffer.

There is nothing wrong with this function, but a simpler approach is using reformatter, a nice tool from the prolific mind of Steve Purcell.

Once installed, defining a new formatter is trivial:

( reformatter-define xml-format :program "xmllint" :args ' ( "--format" "-" ) :mode nil )

Now I can add a key binding for xml-format or simply type M-x xml-format in an XML buffer to have it nicely printed.

Note that setting :mode to nil tells reformatter-define to not create a minor mode, which I don’t need in this particular case. The minor mode could be useful if you want your formatter to be called automatically when you save a buffer. For instance, without changing the default setting for :mode you could set up the formatter in a project via .dir-locals.el with:

(( nxml-mode ( mode . xml-format-on-save )))