Aller aux balises XML correspondantes dans Vim

L’opérateur Vim % saute aux parenthèses, aux fins de commentaires et à quelques autres choses. Cela ne correspond toutefois pas aux balises XML (ou à toute autre balise, à ma connaissance).

Quelle est la meilleure façon de passer à la balise XML correspondante à l’aide de Vim?

Remarque: Ce que je veux vraiment faire, c’est dupliquer une section dans un fichier XML sans rechercher manuellement la balise correspondante.

Il y a un plugin vim appelé matchit.vim. Vous pouvez le trouver ici: http://www.vim.org/scripts/script.php?script_id=39 . Il a été créé à peu près le but exact que vous décrivez.

Installez cela, placez votre curseur sur le corps de la balise (pas le <>, sinon il correspondra à ceux-ci) et appuyez sur% pour passer à l’autre balise. Voir la page du script pour savoir à quoi d’autre il correspond.

Vous pouvez le faire sans plugins supplémentaires:

  • placer le curseur sur la balise
  • v a t – sélectionne l’étiquette (externe) et place le curseur à la fin
  • une fois que vous avez votre sélection, vous pouvez basculer entre le haut et le bas avec o ( mise à jour basée sur la note de Michael Gruber )
  • c – change ou, y – copie ou, échappe pour quitter le mode visuel …

Une autre opération utile est: v i t – sélectionnera le contenu de la balise (interne).

Update (merci à @elrado) Exemple: v i t o vous permettra de sélectionner le contenu interne du tag et de positionner le curseur au début du texte sélectionné.

Référence: https://superuser.com/questions/182355/how-can-i-select-an-html-tags-content-in-vim

Référence Vim (merci à @Geek de l’avoir noté):

 :help visual-operators 

tu auras:

 4. Operating on the Visual area *visual-operators* The objects that can be used are: ... at a   block (with tags) |v_at| it inner   block |v_it| ... 

L’OP a déclaré qu’il souhaitait vraiment copier une section de XML sans avoir à trouver la balise correspondante. Cela se fait facilement en mode normal avec yatp , ce qui ramène le texte à l’intérieur et y compris les tags correspondants, puis le colle. yitp est presque identique, mais n’inclut pas les balises externes.

Le “y” dans la chaîne est bien sûr la commande “yank” en mode normal. ( :help y )

a ou i peut être utilisé pour sélectionner un object après un opérateur tel que y ou dans une sélection visuelle. Le symbole après a ou i spécifie ce qui doit être sélectionné. Le type d’object t utilisé ici indique une balise SGML. ( :help object-select ).

Bien sûr, signifie simplement se déplacer quelque part par le moyen de votre choix et p place le texte retiré à cet endroit.

Juste mon truc d’utiliser “yank”, “object-select” (sélection de tag) et “sauter au dernier texte tiré”.

 yit`] 

sauter à droite avant de fermer la balise

et

 yit 

sauter à droite après avoir ouvert la balise

Remarque: cela changera le contenu du registre par défaut