在vim中匹配并替换整个视觉范围

时间:2011-10-02 15:18:22

标签: regex vim substitution

我想在视觉上标记几行,然后用< p>围绕整个范围。和< / p>。在经过大量的摆弄之后,我提出了这个替代命令,它可以起作用:

:'<,'>s/^\(\_.*\)\%V/<p>\1<\/p>/

有没有更好的方法可以做到这一点,还是有人可以解释为什么会有效?

\_.匹配包括行尾的每个字符。 ^(行首)和\%V(匹配视觉范围)接缝表现得很奇怪。例如,文档建议您使用两个\%V来包围表达式,但这不是必要的接缝。不使用\%V或在开始时只使用一个匹配整个缓冲区。删除^会导致最后一行匹配并单独替换。最后的$接缝也是不必要的。

1 个答案:

答案 0 :(得分:5)

1。使用surround vim

您可以在可视模式下使用surround.vim

s<p 输入

E.g。 vat(视觉选择'周围'标记),s<p环绕<p>...</p>

故障:

  • 增值税(视觉上选择标签;进行您想要的任何视觉选择)
  • S&LT; (环绕标签),在本例中为p

2。使用带有范围标记

的ex命令

编辑:没有环绕,你就可以

  

'&LT; 输入 {{ 1}} ESC

     

'&GT; 输入 <p> < KBD> ESC

3。使用yank和XML filetype插件插入寄存器内容:

或者更简单:

  

d 0 </p> 1 的Cr ESC

请注意,在 1 我的XML filtetype插件(我认为是默认设置)会自动提供结束标记(<p>),因此我们只需插入使用 Cr 取出内容---甚至不用插入模式!