Vim: Czynienie tekstu XML „ładnym”


33

Czy istnieje prosty sposób, viaby tekst XML był „ładny”?

Na przykład:

Chcę to..

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

być tym ...

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

Jeśli wszystko inne zawiedzie, zawsze są makra. qq0dt<jqi potem 3@qj@@5k4I<space><esc>j.j.j.. Wow, to wygląda dość tajemniczo.
Braden Best

Odpowiedzi:


39

Miałem z tym najwięcej szczęścia:

:%!xmllint --format %

Jest jednak ściśle związany z tagami, więc popełni błąd, jeśli tagi otwierające i zamykające się nie zgadzają. Dodaje również deklarację XML w górnej części pliku, jeśli jeszcze jej nie masz.

Ta strona zaleca następujące czynności, chociaż nie mogę jej uruchomić:

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

Przetestowałem to i wydaje się, że działa. Nie idealnie, ale wykonuje zadanie.

Jeśli to nie działa dobrze, możesz użyć minidom w Pythonie, aby sformatować go za Ciebie.

import xml.dom.minidom

xml = xml.dom.minidom.parse(filename)
formatted_xml = xml.toprettyxml()

To gg=Gpolecenie naprawdę nie działało. Zamiast tego po prostu usunąłem wszystkie poprzednie wcięcia, które miałem.
Rob Avery IV

Tak, znalazłem to samo. Wydaje się, że działa, gdy mam już określony typ formatowania, ale zwykle nie. Będę musiał to przetestować jeszcze trochę.
Nate

1
:%!xmllint --format %wydaje się działać dobrze, więc dodałem to do wpisu.
Nate

1
@kenny Zmodyfikowałem odpowiedź, aby sobie z tym poradzić
törzsmókus

2
Robię ": ustaw ft = xml |%! Xmllint --format -", aby działał na bieżącym buforze i włączył podświetlanie składni
grebulon
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.