1

在 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! 命令,并使用它作为替代?

谢谢,丹

4

2 回答 2

3

如果您有PROC SQL寄存器 a 中的quit;块和寄存器 b 中的块,那么您可以简单地执行以下操作。

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

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

于 2010-03-03T17:02:02.140 回答
1

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

:%s/^select/\=@a."\n".submatch(0)/

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

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

于 2010-03-03T21:50:47.980 回答