2016-06-24 22 views
1

這是我的文件,我用vim編輯文本:如何更換vim的舊字符串的字符串+附加串

enter image description here

我想將其更改爲以下內容:

enter image description here

我一直在使用正則表達式:%s/^.*$/\g<0>,\g<0>/g試過,但它不工作..

+0

請勿將文字作爲圖片發佈。將文本顯示爲文本 – hek2mgl

+2

另一種替代方法是,如果您想使用':%s/\ v(。+)/ \ 1,\ 1 /' –

回答

3

可以實現與以下替換:

:%s/^.*$/&,&/ 
     ^^ 

^.*$圖案將整行匹配,並且&是一個反向引用整場比賽。所以,替補隊員將整場比賽,逗號以及整場比賽都插回去。

注意:此^.*$模式的^$可以省略,但很多人喜歡,讓他們明確的模式,以促進模式的可讀性和進一步型式試驗。

要避免匹配的情況下,另一種:

:%s/.\+/&,&/ 
    ^^^ 

.\+將1個或多個字符相匹配。

+0

@Downvoter,您還可以使用backreferecing,請讓我們知道這個答案有什麼不好,以及爲什麼它沒有幫助,它缺少什麼研究。 –

+0

難道你不認爲標誌'g'在替代結束時是無用的,因爲你要選擇所有的行! –

+0

@Meninx:這並不重要,不是嗎?它又是與'^'和'$'相同的東西。 –

3

使用:s

%s/.*/&,&/ 

  • 你不需要^ and $因爲正則表達式是貪婪的。
  • 你也不需要g標誌。
  • ,如果你想打高爾夫球一點,你並不需要最後/

或者使用normal命令:

%norm! yaWA,^R" 

%norm! yg_A,^R" 

^R,按<c-v><c-r>

+0

@WiktorStribiżew放鬆一下..我從來沒有在SO上冷靜地回答過。因爲人們發佈答案試圖幫助他人。除非這是完全錯誤的答案。如果我失望了,我總是發表評論。 – Kent

+0

我是vim的新手。你能解釋一下我的正常命令嗎?非常感謝 – elsonwx

+1

@elsonwx'normal'就像在正常模式下做擊鍵一樣。請閱讀':h:norm'幫助文檔。在這個例子中,'yaW'抽出了WORD,然後'A'進入了INSERT模式,添加了''','和''填充了被抽出的WORD。 ('yg_')會在沒有換行符的情況下將整行刪除。 – Kent

-1

執行這些一個接一個:

:%s/abc/abc,abc/g 
:%s/123/123,123/g 
:%s/this/this,this/g 
:%s/them/them,them/g 
:%s/my/my,my/g 

類似地,替換所需字符串字符串用於操縱的任何字符串。

+0

如果OP有500行? – Kent

+0

那麼我會寫一個bash腳本來使用'echo'而不使用vim的功能。 –

+0

而這樣的答案並沒有被降低,我的是 - 我無法得到它。 –

1

另一種不使用正則表達式的方法是在更改第一行時錄製宏,然後播放宏以更改其餘行。

ggqay$A,<ESC>[email protected] 

說明:
gg移動光標到第一行開頭
qa開始記錄在寄存器a
y$複製線
A走在該行
,<ESC>插件一端插入模式逗號並返回正常模式
p粘貼副本
+將光標移動到下一行的開始處
q停止錄音
[email protected]播放宏四次改變下四行。