Vim: Tornando o texto XML "bonito"

33

Existe uma maneira fácil vide tornar seu texto XML "bonito"?

Por exemplo:

Eu quero isso..

            <person>
  <name>Nick</name>
 <age>26</age>
         <gender>male</gender>
<occupation>doctor</occupation>
    </person>

ser isso ...

<person>
    <name>Nick</name>
    <age>26</age>
    <gender>male</gender>
    <occupation>doctor</occupation>
</person>
Rob Avery IV
fonte
Se tudo mais falhar, sempre haverá macros. qq0dt<jqe depois 3@qj@@5k4I<space><esc>j.j.j.. Uau, isso parece bem enigmático.
Braden Melhor

Respostas:

39

Eu tive mais sorte com isso:

:%!xmllint --format %

No entanto, é rigoroso quanto às suas tags, portanto ocorrerá um erro se as tags de abertura e fechamento não corresponderem. Ele também adiciona uma declaração XML na parte superior do seu arquivo, se você não tiver uma também.

Esta página recomenda o seguinte, embora eu não consiga fazê-la funcionar:

:set filetype=xml
:filetype indent on
gg=G

Eu testei, e parece funcionar, de certa forma. Não é perfeitamente, mas faz o trabalho.

Se isso não funcionar bem, você pode usar o minidom no Python para formatá-lo para você.

import xml.dom.minidom

xml = xml.dom.minidom.parse(filename)
formatted_xml = xml.toprettyxml()
Nate
fonte
Esse gg=Gcomando realmente não funcionou. Em vez disso, apenas removeu todos os recuos anteriores que eu tinha.
Rob Avery IV
Sim, eu encontrei a mesma coisa. Parece funcionar quando eu já tenho um tipo específico de formatação, mas geralmente não. Vou ter que testar um pouco mais.
Nate
1
:%!xmllint --format %parece funcionar bem, então eu adicionei isso ao post.
Nate
1
@kenny eu modifiquei a resposta para lidar com isso
törzsmókus
2
Eu estou fazendo ": conjunto ft = xml |% xmllint --format -" para fazê-lo funcionar no buffer corrente e ligue destaque de sintaxe
grebulon