Vim indent fichier xml

J’apprends Vim mais je pensais que c’était une tâche simple mais je ne peux pas la faire fonctionner. J’ai un navigateur SO mais les solutions ne fonctionnent pas pour moi.

J’essaie d’indenter correctement un fichier (xml). La commande que j’utilise est:

gg=G 

ou ggVG = (fait que celui-ci fait quelque chose de différent;))

Mon .vimrc est:

 syntax on filetype plugin indent on set nu 

J’aime la réponse de Berei. Cependant, je pense que ce qui suit est un peu plus flexible en ce sens que vous n’avez pas à modifier votre fichier vimrc . De plus, il est plus facile de formater certaines parties du fichier XML (ce que je fais souvent).

Commencez par mettre en évidence le XML que vous souhaitez formater.

Ensuite, en mode normal, tapez ! xmllint --format - ! xmllint --format -

Votre ligne de commande en bas ressemblera à ceci:

:'<,'>!xmllint --format -

Puis appuyez sur Entrée.

Explication technique

Le texte sélectionné est envoyé à la commande xmllint , puis --format ‘ed et les résultats de xmllint sont placés sur le texte sélectionné dans vim. Le - à la fin de la commande est destiné à recevoir une entrée standard – qui, dans ce cas, est le texte sélectionné que vim envoie à xmllint .

Utilisez un programme externe pour mettre en retrait vos fichiers xml . Dans ce cas, j’ai choisi xmllint , donc définissez la commande sur l’option equalprg :

 :set equalprg=xmllint\ --format\ - 

Maintenant, vous pouvez exécuter

 gg=G 

laisser xmllint formater vos fichiers xml .

Pour l’obtenir chaque fois que vous utilisez vim , utilisez une autocommand pour le définir.

autocommand partir d’un commentaire ci-dessous

 au FileType xml setlocal equalprg=xmllint\ --format\ --recover\ -\ 2>/dev/null 

Une solution simple que j’aime et qui ne nécessite aucun outil tiers est d’insérer une nouvelle ligne avant chaque balise d’ouverture ‘<...>‘. Ensuite, vous pouvez utiliser l’auto-indentation vim standard. En bref:

  1. %s/
  2. gg=G pour l'indentation automatique

Réponse courte: Allumez matchit.vim . Vous pouvez append packadd matchit à votre .vimrc , ou utiliser vim-sensible , ce qui le permet par défaut.

Réponse longue: J’ai essayé de nombreuses stratégies d’auto-indentation XML dans Vim, y compris l’ approche xmllint discutée sur le wiki Vim . Le problème avec xmllint (et la même approche avec d’autres outils CLI externes tels que xmlformat et tidy , également) est qu’ils insistent tous sur l’extraction des lignes vierges. Si tout ce que vous voulez, c’est indenter votre XML, sans supprimer les lignes vides, les commentaires et / ou tout autre formatage intentionnel, xmllint n’est pas le meilleur choix.

Il s’avère que la commande equal (=) de Vim prend déjà en charge XML, tant que le script matchit.vim est activé. Un moyen très facile de lui permettre d’adopter le vim-sensible de tpope. Une autre consiste à append packadd matchit à votre .vimrc . Ensuite, le formatage XML ne fonctionnera “que”.

C’est facile à réaliser une fois que ~ / .vimrc est configuré correctement.

Définissez les options suivantes dans ~ / .vimrc:

 filetype indent on set smartindent 

Cela vous permet de déplacer le curseur en haut du fichier et de mettre en retrait à la fin: gg = G

Vous pouvez également sélectionner le texte souhaité avec le mode visuel et appuyer sur = pour le mettre en retrait.

Dans VIM, j’indente automatiquement le fichier entier (en utilisant les tabs durs) en utilisant la commande suivante:

 :%!XMLLINT_INDENT="^I" xmllint --format - 

Le ^I est un caractère unique que vous générez via: CTRL + v , CTRL + i

J’ai eu le même problème. Il s’est avéré que la ligne

 set viewdir=~\.vim\views\ 

dans mon .vimrc causé le problème. Assurez-vous que vous ne l’avez pas.