Si vous n'avez besoin que d'une jolie mise en retrait sans introduire de nouveaux sauts de ligne, vous pouvez appliquer l'attribut indent-region
à l'ensemble du tampon avec ces touches :
C-x h
C-M-\
Si vous avez également besoin d'introduire des sauts de ligne, afin que les balises d'ouverture et de fermeture soient sur des lignes séparées, vous pouvez utiliser la très belle fonction elisp suivante, écrite par Benjamin Ferrari . Je l'ai trouvé sur son blog et j'espère que je suis d'accord pour le reproduire ici :
(defun bf-pretty-print-xml-region (begin end)
"Pretty format XML markup in region. You need to have nxml-mode
http://www.emacswiki.org/cgi-bin/wiki/NxmlMode installed to do
this. The function inserts linebreaks to separate tags that have
nothing but whitespace between them. It then indents the markup
by using nxml's indentation rules."
(interactive "r")
(save-excursion
(nxml-mode)
(goto-char begin)
(while (search-forward-regexp "\>[ \\t]*\<" nil t)
(backward-char) (insert "\n") (setq end (1+ end)))
(indent-region begin end))
(message "Ah, much better!"))
Cela ne dépend pas d'un outil externe comme Tidy.