Vim:每次找到某些文本时添加粘贴缓冲区

时间:2010-03-03 16:46:32

标签: vim buffer paste

在Vim中,我试图粘贴几行:

PROC SQL;
   CONNECT TO DB2(DSN=test);
   CREATE TABLE test AS SELECT *
   FROM CONNECTION TO DB2 (

以“select”开头的每一行 和

);
quit;

以“FOR FETCH ONLY”结尾的每一行

有没有办法使用粘贴缓冲区?像

%s/^select/(a!)\rselect/

因此,一旦我输入命令,它就会打开一个像 a!命令那样的粘贴缓冲区,并将其用作替代?

谢谢, 丹

2 个答案:

答案 0 :(得分:3)

如果寄存器a中有PROC SQL块,寄存器b中有quit;块,则可以执行以下操作:

:g/^select/put! a
:g/FOR FETCH ONLY$/put b

:g找到与给定模式匹配的所有行,然后在这些行上运行指定的ex命令。在这种情况下,您希望使用:put粘贴指定registers的内容。

答案 1 :(得分:1)

对于在行上方或下方插入文本文本的问题,我将使用jamessan使用:g/.../put a的解决方案。但是,要回答关于使用寄存器作为替换的一部分的问题,可以使用表达式来替换,方法是使用\ =来启动它。所以这也应该做你想要的,假设“PROC SQL; ...”文本在寄存器a:

:%s/^select/\=@a."\n".submatch(0)/
表达式@a中的

计算寄存器a的内容,而submatch(0)是一个求值为正则表达式匹配的字符串的函数。

请注意,整个替换被视为表达式,因此如果要包含常规文本,则需要引用它并使用.连接字符串。