Vim: Rendere il testo XML "carino"


33

Esiste un modo semplice viper rendere "grazioso" il testo XML?

Per esempio:

Voglio questo..

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

essere questo ...

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

Se tutto il resto fallisce, ci sono sempre macro. qq0dt<jqe poi 3@qj@@5k4I<space><esc>j.j.j.. Wow, sembra piuttosto enigmatico.
Braden Best

Risposte:


39

Ho avuto la maggior fortuna con questo:

:%!xmllint --format %

È rigoroso per i tuoi tag, tuttavia, quindi verrà fuori errore se i tag di apertura e chiusura non corrispondono. Aggiunge anche una dichiarazione XML nella parte superiore del file, se non ne hai anche una.

Questa pagina raccomanda quanto segue, anche se non riesco a farlo funzionare:

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

L'ho provato e sembra funzionare un po '. Non perfettamente, ma fa il lavoro.

Se ciò non funziona bene, puoi usare minidom in Python per formattarlo per te.

import xml.dom.minidom

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

Quel gg=Gcomando non ha funzionato davvero. Invece, ha appena rimosso tutte le rientranze precedenti che avevo.
Rob Avery IV,

Sì, ho trovato la stessa cosa. Sembra funzionare quando ho già un tipo specifico di formattazione, ma di solito no. Dovrò provarlo un po 'di più.
Nate,

1
:%!xmllint --format %sembra funzionare bene, quindi l'ho aggiunto al post.
Nate,

1
@kenny Ho modificato la risposta per farcela
törzsmókus

2
Sto facendo ": set ft = xml |%! Xmllint --format -" per farlo funzionare sul buffer corrente e attivare l'evidenziazione della sintassi
grebulon
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.