Jump to matching XML tags in Vim

Vim % operator jumps to matching parentheses, comment ends and a few other things. It doesn't, however, match XML tags (or any other tag, to the best of my knowledge).

What's the best way to jump to the matching XML tag using Vim?

Note: What I really want to do is duplicate a section in an XML file without manually looking for the matching tag.

35085 次浏览

有一个叫做 match it.vim 的 Vim 插件。你可以在这里找到它: http://www.vim.org/scripts/script.php?script_id=39。创造它的目的和你描述的一模一样。

安装后,将光标放在标记的主体上(不是 < > ,否则它会匹配这些) ,然后按% 跳转到另一个标记。查看脚本页面,找出其他匹配的内容。

OP 表示,他真正想做的是复制一段 XML,而不必找到匹配的标记。这很容易在常规模式下用 yat<motion>p完成,yat<motion>p将文本拉入其中并包含匹配的标记,然后粘贴它。yit<motion>p几乎相同,但是它不包括外部标记。

字符串中的“ y”当然是普通模式的“ yank”命令

ai可以用于在操作符(如 y)之后进行对象选择或在可视选择内部进行对象选择。ai之后的符号指定应该选择什么。这里使用的对象类型 t表示一个 SGML 标记。(:help object-select).

当然,<motion>仅仅意味着通过你的选择移动到某个地方,而 p将被拉扯的文本放在那个位置。

你不需要额外的插件就可以做到这一点:

  • 把光标放在标签上
  • vat-将选择(外部)标记并将光标放在末尾
  • 一旦你得到了你的选择,你可以切换之间的顶部和底部与 o(根据 Michael Gruber 的笔记更新的)
  • c-更改或,y-复制或,转义为离开视觉模式..。

另一个有用的操作是: vit-将选择标记的内容(内部)。

更新(感谢@elrado) 示例: vito将使您能够选择标记的内部内容并将光标定位在所选文本的开头。

参考资料: https://superuser.com/questions/182355/how-can-i-select-an-html-tags-content-in-vim

Vim 参考(感谢@Geek 注意到这一点) :

:help visual-operators

你会得到:

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|
...

只是我使用“ yank”,“ object-select”(标签选择)和“跳转到最后一个 yank 文本”的技巧。

yit`]

在结束标记之前跳到右边

还有

yit

在打开标签后跳到右边

注意: 这将改变默认寄存器的内容