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.
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.
Vous pouvez le faire sans plugins supplémentaires:
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|
...
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.
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