Vim: hacer que el texto XML sea "bonito"

33

¿Hay alguna manera fácil vide hacer que su texto XML sea "bonito"?

Por ejemplo:

Quiero esto..

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

ser esto ...

<person>
    <name>Nick</name>
    <age>26</age>
    <gender>male</gender>
    <occupation>doctor</occupation>
</person>
Rob Avery IV
fuente
Si todo lo demás falla, siempre hay macros. qq0dt<jqy luego 3@qj@@5k4I<space><esc>j.j.j.. Wow, eso se ve bastante críptico.
Braden Best

Respuestas:

39

He tenido más suerte con esto:

:%!xmllint --format %

Sin embargo, es estricto con sus etiquetas, por lo que se producirá un error si sus etiquetas de apertura y cierre no coinciden. También agrega una declaración XML en la parte superior de su archivo, si no tiene una también.

Esta página recomienda lo siguiente, aunque no puedo hacer que funcione:

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

Lo probé y parece funcionar, de alguna manera. No perfectamente, pero hace el trabajo.

Si eso no funciona bien, puede usar minidom en Python para formatearlo.

import xml.dom.minidom

xml = xml.dom.minidom.parse(filename)
formatted_xml = xml.toprettyxml()
Nate
fuente
Ese gg=Gcomando realmente no funcionó. En cambio, simplemente eliminó todas las hendiduras anteriores que tenía.
Rob Avery IV
Sí, he encontrado lo mismo. Parece funcionar cuando ya tengo un tipo específico de formato, pero generalmente no. Tendré que probarlo un poco más.
Nate
1
:%!xmllint --format %parece funcionar bien, así que lo agregué a la publicación.
Nate
1
@kenny Modifiqué la respuesta para hacer frente a eso
törzsmókus
2
Estoy haciendo ": set ft = xml |%! Xmllint --format -" para que funcione en el búfer actual y active el resaltado de sintaxis
grebulon