2010-03-03 39 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