Vim:每次找到特定文本时添加粘贴缓冲区
在Vim中,我尝试粘贴几行:Vim:每次找到特定文本时添加粘贴缓冲区,vim,buffer,paste,Vim,Buffer,Paste,在Vim中,我尝试粘贴几行: PROC SQL; CONNECT TO DB2(DSN=test); CREATE TABLE test AS SELECT * FROM CONNECTION TO DB2 ( 以“选择”开头的每行上方 及 在以“仅供提取”结尾的每行下方 有没有办法使用粘贴缓冲区?像 %s/^select/(a!)\rselect/ 因此,一旦我输入命令,它就会打开一个粘贴缓冲区,就像a!命令,并将其用作替代 谢谢, Dan如果您在寄存器a中有PROC S
PROC SQL;
CONNECT TO DB2(DSN=test);
CREATE TABLE test AS SELECT *
FROM CONNECTION TO DB2 (
以“选择”开头的每行上方
及
在以“仅供提取”结尾的每行下方
有没有办法使用粘贴缓冲区?像
%s/^select/(a!)\rselect/
因此,一旦我输入命令,它就会打开一个粘贴缓冲区,就像a!命令,并将其用作替代
谢谢,
Dan如果您在寄存器a中有
PROC SQL
块,并且退出代码>寄存器b中的块,然后您可以简单地执行以下操作
:g/^select/put! a
:g/FOR FETCH ONLY$/put b
查找与给定模式匹配的所有行,然后在这些行上运行指定的ex命令。在这种情况下,如果您在寄存器a中有PROC SQL
块,并且退出,您希望使用粘贴指定的内容。代码>寄存器b中的块,然后您可以简单地执行以下操作
:g/^select/put! a
:g/FOR FETCH ONLY$/put b
查找与给定模式匹配的所有行,然后在这些行上运行指定的ex命令。在这种情况下,您希望使用粘贴指定内容。对于在行上方或下方插入文本的问题,我将使用jamessan的解决方案,即使用:g/../put a
。但是,要回答有关将寄存器用作替换的一部分的问题,可以使用表达式替换,方法是以\=开头。因此,假设“PROC SQL;…”文本位于寄存器a中,这也应该满足您的要求:
:%s/^select/\=@a."\n".submatch(0)/
在表达式中@a计算为寄存器a的内容,submatch(0)是一个计算为正则表达式匹配的字符串的函数
请注意,整个替换被视为一个表达式,因此如果您想包含常规文本,则需要引用它并将字符串与
连接。对于在行上方或下方插入文本的问题,我将使用jamessan使用:g/../put a
的解决方案。但是,要回答有关将寄存器用作替换的一部分的问题,可以使用表达式替换,方法是以\=开头。因此,假设“PROC SQL;…”文本位于寄存器a中,这也应该满足您的要求:
:%s/^select/\=@a."\n".submatch(0)/
在表达式中@a计算为寄存器a的内容,submatch(0)是一个计算为正则表达式匹配的字符串的函数
请注意,整个替换被视为一个表达式,因此如果您想包含常规文本,则需要引用它并将字符串与
连接起来,我认为是一个原始帖子中提到的代码>是:append代码>命令,而不是a寄存器。我认为a原始帖子中提到的代码>是:append代码>命令,而不是a寄存器。