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
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.
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
.
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
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:
%s/</\r</g
gg=G
à retrait automatique 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.
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.
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
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.