我想要提取跨多行的文本的多次出现,并且可以与单个Vim正则表达式匹配(使用元字符\_)。不幸的是,尽管匹配行在Vim中得到了正确的突出显示,但当我在匹配的regexp之后添加任何Vim命令(如delete或yank)时,该命令只适用于每个匹配的第一行。
示例:
1: bad_function(arg1,
2: arg2, arg3,
3: ...
4: argN);
5: good_function();
6: ...
7: bad_function(arg2_1,
8: ...
9: arg2_N);
10: another_good_function(); 如果我执行:g/bad_function([^;]\+\_[^;]\+;$/d,那么只有第1行和第7行被删除,尽管突出显示的是第1-4和7-9行。
如何删除所有匹配的(突出显示)行?
发布于 2010-11-27 12:24:18
试试这个:
:let @a=''
:g/first\_.*second.*$/normal! v/second^M$"Ay使用CTRL输入^M,然后输入.
发布于 2010-11-27 11:15:10
为了在寄存器中积累行的匹配范围,可以使用以下命令。
:let @a='' | g/^first/,/^second/y A发布于 2010-11-27 06:33:21
正如我在评论中已经指出的,这个问题已经解决了你的问题:
:%g/your_pattern/yank A
P为我工作。
如果要在不同行上匹配多个术语,可以尝试(在命令模式下):
"zyy (do this on empty line to empty the register 'z')
:%g/first.*\|second.*/yank z (grab matches in the 'z' register)
P (for pasting the contents of the last register)https://stackoverflow.com/questions/4290435
复制相似问题