web-dev-qa-db-fra.com

Accédez aux balises XML correspondantes dans Vim

Vim % L'opérateur passe aux parenthèses correspondantes, les commentaires se terminent et quelques autres choses. Cependant, il ne correspond 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 souhaite vraiment dupliquer une section dans un fichier XML sans rechercher manuellement la balise correspondante.

137
Nathan Fellman

Il existe 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-le, 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 il correspond.

72
sykora

Vous pouvez le faire sans plugins supplémentaires:

  • placer le curseur sur la balise
  • vat - sélectionnera la balise (externe) et placera 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 - changer ou, y - copier ou, échapper pour quitter le mode visuel ...

Une autre opération utile est: vit - sélectionnera le contenu de la balise (intérieure).

Mise à jour (grâce à @elrado) Exemple: vito vous permettra de sélectionner le contenu interne de la balise 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 <tag> </tag> block (with tags)        |v_at|
    it  inner <tag> </tag> block            |v_it|
    ...
232
Robert Lujo

L'OP a déclaré que ce qu'il voulait vraiment faire était de copier une section de XML sans avoir à trouver la balise correspondante. Cela se fait facilement en mode normal avec yat<motion>p, qui tire le texte à l'intérieur et y compris les balises correspondantes, puis le colle. yit<motion>p est presque le même, mais il 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 la sélection d'objets après un opérateur tel que y ou à l'intérieur d'une sélection visuelle. Le symbole après a ou i spécifie ce qui doit être sélectionné. Le type d'objet t utilisé ici indique une balise SGML. (:help object-select).

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

36
Codie CodeMonkey

Juste mon truc d'utiliser "yank", "object-select" (tag select) et "jump to last yanked text".

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

5
transang