在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!命令那样的粘贴缓冲区,并将其用作替代?
谢谢, 丹
答案 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)是一个求值为正则表达式匹配的字符串的函数。
请注意,整个替换被视为表达式,因此如果要包含常规文本,则需要引用它并使用.
连接字符串。