web-dev-qa-db-fra.com

Fichier xml indent

J'apprends Vim mais je pensais que c'était une tâche simple, mais je n'arrive pas à le 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 = (créé celui-ci fait probablement quelque chose de différent;))

Mon .vimrc est:

syntax on 
filetype plugin indent on 
set nu 
85
Haagenti

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 (quelque chose que je fais souvent).

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

Puis, en mode normal, tapez ! 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 sert à recevoir l’entrée standard - qui, dans ce cas, est le texte sélectionné que vim envoie à xmllint.

172
Jesse Hogan

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 un autocommand pour le définir.

autocommand d'un commentaire ci-dessous

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

Une solution simple qui me convient et qui ne nécessite aucun outil tiers est d'insérer une nouvelle ligne avant chaque balise d'ouverture '<...>'. Vous pouvez ensuite utiliser l'auto-indentation standard de vim. En bref:

  1. %s/</\r</g
  2. gg=G à retrait automatique
29
KFL

Réponse courte: Activez matchit.vim . Vous pouvez ajouter packadd matchit à ton .vimrc, ou utilisez vim-sensible , qui l’active par défaut.

Réponse longue: J'ai essayé plusieurs stratégies d'auto-indentation de XML dans Vim, y compris l'approche l'approche de xmllint décrite sur le wiki de 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 pour que les nouvelles lignes vides soient supprimées. Si tout ce que vous voulez, c'est mettre en retrait votre code XML sans supprimer les lignes vierges, les commentaires et/ou toute autre mise en forme intentionnelle, alors xmllint n'est pas le meilleur choix.

Il s'avère que la commande de Vim equals (=) prend déjà en charge XML, tant que le script matchit.vim est activé. Un moyen très facile de l'activer est d'adopter le vim-sensible de tpope. Une autre consiste à ajouter packadd matchit à ton .vimrc. Ensuite, le formatage XML "fonctionnera simplement" hors de la boîte.

11
ctrueden

Ceci 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 d’indenter à la fin: gg = G

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

11
jarederaj

Dans VIM, j'indente automatiquement l'intégralité du fichier (à l'aide d'onglets fixes) à l'aide de 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

4
Cloud

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

set viewdir=~\.vim\views\

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

1
Boris Brodski