Jump to matching XML tags in Vim
There is a vim plugin called matchit.vim . You can find it here: http://www.vim.org/scripts/script.php?script_id=39 . It was created pretty much the exact purpose you describe.
Install that, place your cursor on the body of the tag (not the <>, else it'll match those) and press % to jump to the other tag. See the script's page to find out what else it matches.
The OP stated that what he really wanted to do is copy a section of XML without having to find the matching tag. This is easily done in normal mode with yat<motion>p
, which yanks the text inside and including the matching tags, then pastes it. yit<motion>p
is almost the same, but it doesn't include the outer tags.
The 'y' in the string is of course the normal mode "yank" command. (:help y
)
a
or i
can be used for object selection after an operator such as y
or inside a visual selection. The symbol after a
or i
specifies what should be selected. The object type t
used here indicates an SGML tag. (:help object-select
).
Of course <motion>
just means to move somewhere by the means of your choice and p
puts the yanked text at that location.
You can do this without additional plugins:
- place cursor on the tag
- vat - will select the (outer) tag and place cursor on the end
- once you've got your selection you can toggle between the top and bottom with o (update based on Michael Gruber's note)
- c - change or, y - copy or, escape for leaving visual mode ...
Another useful operation is: vit - will select content of the tag (inner).
Update (thanks to @elrado) Example: vito will enable you to select inner content of the tag and position cursor on the beginning of the selected text.
Reference: https://superuser.com/questions/182355/how-can-i-select-an-html-tags-content-in-vim
Vim reference (thanks to @Geek for noting this out):
:help visual-operators
you'll get:
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|
...