2011-11-17 68 views
3

我使用gvim的在Windows上的末端,有幾行文字,看起來像這樣如何將文本追加到在GVIM或線VI

​​

一個文件,我想追加以下行每一行的結尾。

', count(*) from [Tablename] where msgid in (select msgid from mainTable where row_dtm<'17NOV11') 

結果應該是這樣的(請注意,[表名]由實際的表名替換。

Select '305','TableA', count(*) from TableA where msgid in (select msgid from mainTable where row_dtm<'17NOV11') 
Select '313','TableB', count(*) from TableB where msgid in (select msgid from mainTable where row_dtm<'17NOV11') 
Select '313','TableC', count(*) from TableC where msgid in (select msgid from mainTable where row_dtm<'17NOV11') 

,我可以添加附加在通過只是在做

文末
%s/$/', count(*) from [Tablename] where msgid in (select msgid from mainTable where row_dtm<'17NOV11')/g 

但我堅持就如何我可以讀表名和投入到位的[表名]。

基本上我只是試圖產生幾個查詢。有任何想法嗎? 我知道表名將始終是從行尾到第一個'字符的文本,但是如何讀取它並將其添加到修改的字符串中?

謝謝

回答

10

您需要做一點反向引用。
將搜索項更改爲:
\(\a\+\)$這將匹配表名稱。在\(\)周圍搜索字詞可以在替換時引用它
將\ 1添加到替換字符串,無論您希望顯示錶名。
結果應該是這樣的
%s/\(\a\+\)$/\1', count(*) from [\1] where msgid in (select msgid from mainTable where row_dtm<'17NOV11')/g

+0

「\\(和\\)」之間的\ a \ +是做什麼的?謝謝 – ziggy

+0

'\ a'匹配字母字符(a-zA-Z)和\ +匹配以前的一個或多個charector(\ a)參見[:help patttern](http://vimdoc.sourceforge.net/htmldoc/ pattern.html#pattern) 如果您的表名中包含數字或符號,您將不得不調整該搜索項以進行補償。 –

+0

完美!謝謝 – ziggy

2

您可以隨時錄製宏修改線和移動到下一個,然後重播宏:

qq$bywA', count(count(*) from <ESC>pAwhere msgid in (select msgid from mainTable where row_dtm<'17NOV11')<ESC>[email protected] 
  • qq→開始錄製宏寄存器q
  • $→轉到行尾。
  • b→返回上一個單詞的開頭。
  • yw→抽出單詞。
  • Afoo<ESC>→在行尾添加「foo」,結束插入方式爲<ESC>鍵。
  • p→粘貼抽出的單詞。
  • Afoo<ESC>→在行尾添加「foo」,結束插入方式爲<ESC>鍵。
  • j→轉到下一行。
  • q→結束宏錄製。
  • [email protected]→重播宏在寄存器q 2倍。
4

如果選擇一個區塊(採用CTRL +V(思想,如果你在Windows是,可能會給你的麻煩),你可以添加文字使用一個塊中的所有行。

例如,假設我選擇的是在粗斜體代碼如下:


    Lorem ipsum dolor sit amet, consectetur adipisicing elit, 
    sed do eiusmod tempor incididunt ut labore et dolore magna 
    aliqua. Ut enim ad minim veniam, quis nostrud exercitation 
    ullamco laboris nisi ut aliquip ex ea commodo consequat. 
    Duis aute irure dolor in reprehenderit in voluptate velit 
    esse cillum dolore eu fugiat nulla pariatur. Excepteur sint 
    occaecat cupidatat non proident, sunt in culpa qui officia 
    deserunt mollit anim id est laborum. 

現在我輸入A和文本bla後跟ESC

結果是:


    Lorem ipsum dolor sit amet, coblansectetur adipisicing elit, 
    sed do eiusmod tempor incididublant ut labore et dolore magna 
    aliqua. Ut enim ad minim veniablam, quis nostrud exercitation 
    ullamco laboris nisi ut aliquiblap ex ea commodo consequat. 
    Duis aute irure dolor in repreblahenderit in voluptate velit 
    esse cillum dolore eu fugiat nblaulla pariatur. Excepteur sint 
    occaecat cupidatat non proidenblat, sunt in culpa qui officia 
    deserunt mollit anim id est lablaborum. 

同樣,如果您鍵入,而不是一個,文本將預置。