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

时间:2009-02-18 09:10:28

标签: xml vim

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

<TypeDef name="a">
  <ArrayType high="14" low="0">
    <UndefType type="node">
    </UndefType>
  </ArrayType>
</TypeDef>

我想要复制这个条目。通常情况下,我会转到第一行,使用V进入行可视模式,然后转到最后一行,猛拉并粘贴。

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

2 个答案:

答案 0 :(得分:6)

我今天学到的解决方案(感谢CMS回答this问题)是使用VIM的text object动作。

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

  • y根据以下动作猛烈抨击。
  • at选择当前代码。

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

解决此问题的一种方法是粘贴:put而不只是粘贴p,如下所示:yat:put
请注意,这不会保留缩进,因为XML条目并未作为整行被拉动。

另一种方法是:vatVy

  • v进入可视模式。
  • at如上所述。
  • V切换到Line Visual模式并选择整行。
  • y猛烈挑选。

答案 1 :(得分:2)

除了Nathan的回答,你可能想看看matchit.vim ......如果你有更新的安装你可能有它

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

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

V%y

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