2010-03-03 41 views
1

在Vim中,我试图粘贴几行:Vim的:加粘贴缓冲区每次某些文本中找到

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

上面开始每一行“选择” 和

); 
quit; 
下面

每行以“FOR FETCH ONLY”结尾

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

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

,使其一旦我键入命令它打开像一个一个粘贴缓冲区!命令,并使用它作为替代?

感谢, 丹

回答

3

如果在寄存器中的PROC SQL块和寄存器B的quit;块,那么你可以简单做到以下几点。

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

:g发现匹配给定图案的行,然后运行对这些行指定ex命令。在这种情况下,您想使用:put粘贴指定的registers的内容。

1

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

:%s/^select/\[email protected]"\n".submatch(0)/ 

评估为注册的内容,与子匹配(0)是一个函数,用于评估正则表达式匹配的字符串。

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

+0

我认为原始文章中提到的'a!'是':append!'命令,而不是一个寄存器。 – jamessan 2010-03-04 14:50:23