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.