Vim: XML-Text „hübsch“ machen

33

Gibt es eine einfache Möglichkeit vi, Ihren XML-Text "hübsch" zu gestalten?

Beispielsweise:

Ich will das..

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

das zu sein ...

<person>
    <name>Nick</name>
    <age>26</age>
    <gender>male</gender>
    <occupation>doctor</occupation>
</person>
Rob Avery IV
quelle
Wenn alles andere fehlschlägt, gibt es immer Makros. qq0dt<jqund dann 3@qj@@5k4I<space><esc>j.j.j.. Wow, das sieht ziemlich kryptisch aus.
Braden Best

Antworten:

39

Ich hatte das meiste Glück damit:

:%!xmllint --format %

Ihre Tags sind jedoch streng, sodass ein Fehler auftritt, wenn Ihre öffnenden und schließenden Tags nicht übereinstimmen. Außerdem wird oben in Ihrer Datei eine XML-Deklaration hinzugefügt, falls Sie keine haben.

Diese Seite empfiehlt Folgendes, obwohl ich es nicht zum Laufen bringen kann:

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

Ich habe es ausprobiert und es scheint irgendwie zu funktionieren. Nicht perfekt, aber es wird die Arbeit erledigt.

Wenn das nicht funktioniert, können Sie es mit minidom in Python formatieren.

import xml.dom.minidom

xml = xml.dom.minidom.parse(filename)
formatted_xml = xml.toprettyxml()
Nate
quelle
Dieser gg=GBefehl hat nicht wirklich funktioniert. Stattdessen wurden nur alle vorherigen Einrückungen entfernt, die ich hatte.
Rob Avery IV
Ja, ich habe das Gleiche gefunden. Es scheint zu funktionieren, wenn ich bereits eine bestimmte Art der Formatierung habe, aber normalerweise nicht. Ich muss es noch ein bisschen testen.
Nate
1
:%!xmllint --format %scheint gut zu funktionieren, also habe ich das dem Beitrag hinzugefügt.
Nate
1
@kenny ich geändert , um die Antwort mit , dass zu bewältigen
törzsmókus
2
Ich mache ": set ft = xml |%! Xmllint --format -", damit es im aktuellen Puffer funktioniert und die Syntaxhervorhebung
aktiviert wird