Vim: Rendre le texte XML "joli"


33

Existe-t-il un moyen facile vide rendre votre texte XML "joli"?

Par exemple:

Je veux ceci..

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

être cela ...

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

Si tout échoue, il y a toujours des macros. qq0dt<jqet ensuite 3@qj@@5k4I<space><esc>j.j.j.. Wow, cela semble assez cryptique.
Braden Best

Réponses:


39

J'ai eu le plus de chance avec ça:

:%!xmllint --format %

Cependant, il s’agit de règles strictes pour vos balises, de sorte qu’il risque d’être erroné si vos balises d’ouverture et de fermeture ne correspondent pas. Il ajoute également une déclaration XML en haut de votre fichier, si vous n'en avez pas également.

Cette page recommande les éléments suivants, bien que je ne puisse pas le faire fonctionner:

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

Je l'ai testé et cela semble fonctionner un peu. Pas parfaitement, mais ça fait le travail.

Si cela ne fonctionne pas bien, vous pouvez utiliser minidom en Python pour le formater à votre place.

import xml.dom.minidom

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

Cette gg=Gcommande n'a pas vraiment fonctionné. Au lieu de cela, il a simplement supprimé toutes les empreintes précédentes que j'avais.
Rob Avery IV

Oui, j'ai trouvé la même chose. Cela semble fonctionner quand j'ai déjà un type spécifique de formatage, mais généralement pas. Je vais devoir tester un peu plus.
Nate

1
:%!xmllint --format %semble bien fonctionner, donc j'ai ajouté cela au post.
Nate

1
@kenny j'ai modifié la réponse pour faire face à cela
törzsmókus

2
Je suis en train de faire ": set ft = xml |%! Xmllint --format -" pour le faire fonctionner sur le tampon actuel et activer la coloration syntaxique
grebulon
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.