如何使用VIM复制XML文件中的整个条目?

Nat*_*man 5 xml vim

我在XML文件中有以下内容:

<TypeDef name="a">
  <ArrayType high="14" low="0">
    <UndefType type="node">
    </UndefType>
  </ArrayType>
</TypeDef>
Run Code Online (Sandbox Code Playgroud)

我想复制这个条目.通常我会去第一行,进入Line-Visual模式V,下到最后一行,猛拉并粘贴.

如何在不查找条目结尾的情况下复制整个条目?

Nat*_*man 6

我今天学到的解决方案(感谢CMS回答了这个问题)是使用VIM的文本对象动作.

将光标放在要复制的条目中,然后在命令模式下键入以下内容yat:

  • y 根据以下动作猛拉.
  • at 选择当前标签.

请注意,如果光标位于"ArrayType"标记内,那么将会被拉出.
另请注意,这不会拉扯整条线.仅从开口标签的开口支撑到关闭标签的闭合支撑.如果您不小心,这可能会导致对齐问题.

解决这个问题的一种方法是通过粘贴:put而不仅仅是p这样:yat:put.
请注意,这不会保留缩进,因为XML条目不会作为整行被拉动.

另一种方法是vatVy:

  • v 进入可视模式.
  • at 如上所述.
  • V 切换到Line Visual模式并选择整行.
  • y 挑选了一下.


mic*_*ael 2

除了 Nathan 的答案之外,您可能还想查看 matchit.vim ...如果您有较新的安装,您可能已经拥有它

http://www.vim.org/scripts/script.php?script_id=39

matchit 扩展了 vim 的 % (查找匹配括号)以覆盖 xml/html 标签等。因此,对于您的解决方案,操作将从开始标签开始

V%y
Run Code Online (Sandbox Code Playgroud)

matchit 当然对于一般导航目的非常有用。