跳转到Vim中匹配的XML标签


140

Vim %运算符跳转到匹配的括号,注释结尾和其他一些内容。但是,据我所知,它与XML标签(或任何其他标签)不匹配。

使用Vim跳转到匹配的XML标记的最佳方法是什么?

注意:真正想做的是在XML文件中复制一个部分,而无需手动寻找匹配的标签。


4
在解决原始问题时(在明确的注释之前:),v + a + t组合似乎将您带到视觉选择的底部。另一面似乎是可视模式下的“ o”命令,它将带您进入当前选择的另一端。这是一个有效的技巧,不仅在XML文档中,而且在编辑PHP / HTML时(碰巧对我来说都是如此)。
贾斯汀·贝尔

Answers:


73

有一个名为matchit.vim的vim插件。您可以在这里找到它:http : //www.vim.org/scripts/script.php?script_id=39。它的创建几乎就是您描述的确切目的。

安装后,将光标放在标签的主体上(不是<>,否则将与之匹配),然后按%跳到另一个标签。请参阅脚本页面,以查找其他匹配内容。


4
好一个。一直坐在我的硬盘上。
innaM,2009年

34
有一些版本的matchit,已经随Vim一起提供了。runtime macros/matchit.vim应该启用它,并允许%匹配XML标签。
斯文德(Svend)

1
似乎在NeoVim中默认启用了mtchit.vim。
詹姆斯

可能是您已经有matchit,但默认情况下未启用它。添加packadd! matchit.vimrc启用它。阅读更多:help matchit
ruuter

241

您可以在没有其他插件的情况下执行此操作:

  • 将光标放在标签上
  • 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|
    ...

1
我想跳转到标签,而不是“选择”随附的内容。如果我可以用1或2个击键完成操作,为什么每次要选择标签时都要进行5次击键操作?(实际上发生了很多次)
kumarharsh 2012年

2
很高兴有一种内置的方法(尽管是复杂的方法)可以跳转到结束标记。通过视觉模式绕行是到达那里的唯一方法吗?
Mu Mind 2012年

2
莫莉,你总是和Vim学习新事物!有很多东西要学,这对我很有帮助,谢谢!
gosukiwi 2013年

23
请注意:选择之后,您可以在顶部和底部之间使用“ o”切换
Michael Gruber 2013年

3
@Geek,“ t”代表“标签”。要理解“ a”,您必须首先理解“ i”。cit改变了的标签nterior -只是内容。cat改变一个变量的LL -内容和一个 LSO标签本身,无论是打开和关闭。
爱德华

37

OP表示,他真正想做的是复制XML部分,而不必找到匹配的标签。使用,可以轻松地在普通模式下完成此操作yat<motion>p,该操作会拉动其中的文本并包含匹配的标签,然后将其粘贴。 yit<motion>p几乎相同,但不包含外部标签。

字符串中的“ y”当然是正常模式的“ yank”命令。(:help y

ai可以在操作员(例如y视觉选择)之内或之后用于对象选择。a或之后的符号i指定应选择的内容。t此处使用的对象类型表示SGML标签。(:help object-select)。

当然,<motion>这只是意味着您可以选择p将其移动到某个地方,然后将选中的文本放在该位置。


i代表“内部”(或“内部”)。a代表“一个”?
nilon

@nilon a代表“全部”。
Codie CodeMonkey

助记符我使用的是a代表周围。这对我来说更有意义。
Kit Johnson

5

这是我使用“拉动”,“对象选择”(标签选择)和“跳至上一个被拉动的文本”的技巧。

yit`] 

在关闭标签之前跳到右边

yit

打开标签后跳到右边

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.