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.