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

Mat*_*man 1 regex vim substitution

我想用肉眼标记几行,然后用<p>和</ p>围绕整个范围.经过大量的摆弄后,我提出了这个接缝命令,它可以起作用:

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

有没有更好的方法来做到这一点或有人解释为什么它的工作原理?

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

seh*_*ehe 5

1.使用环绕vim

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

s<pEnter

例如vat(视觉选择'周围'标签),s<p环绕着<p>...</p>

分解:

  • 缸(视觉上选择一个标签;做你想要的任何视觉选择)
  • s <(用标签环绕),在这种情况下, p

2.将ex命令与范围标记一起使用

编辑:没有环绕你也可以

:C-u'<iEnter<p>Esc

:'>aEnter</p>Esc

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

或者更简单:

dO<p>1C-r"Esc

请注意,在1我的XML filtetype插件(我认为它是默认的)自动提供了结束标记(</p>)所以我们可以使用--- 插入被拉出的内容C-r"---甚至不用插入模式!