2011-03-16 59 views
3

我試圖在VIM中用「=」代替所有多個「 - 」字符(來自行的開始處)「Vim正則表達式替換問題

p.e.將「-----」替換爲「=====」
或將「----------」替換爲「==========」

I創建此正則表達式:

%s/^-\{2,}/= ????/g 

有誰知道我可以如何複製「=」替換? (我有什麼「=」後面放)

回答

5

試試這個:

:%s/^-\{2,}/\=substitute(submatch(0), '-','=','g')/ 

或:

:%s/^-\{2,}/\=repeat('=',len(submatch(0)))/ 

詳情請參閱:help sub-replace-\=

+0

非常感謝所有人:) – Reman 2011-03-16 19:12:05

2

我敢肯定有一個更好的答案,但實際來看,我想這樣做,因爲只是爲了簡單起見,兩個獨立的操作:

%s/--/==/g 
%s/=-/==/g 

第一更換所有雙出現,這會變成-----====-。然後修復使用第二剩菜(=-)。我希望能看到更優雅的答案,不過,如果有可能的事情。

2

技術上,%s/-/=/g做這項工作,但在整個文件中,每-

如果你想替換也開始-行我會做這種方式:

g/^-/s/-/=/g 

或者,如果你有第一-之前的一些空間:

g/^\s*-/s/-/=/g 

在線路

剩下的問題到達這樣的:

----------- the-composite-word 

他們變成:

=========== the=composite=word 

爲了解決這個問題,有很多方式。我不是那個主人建議一個非常一般的方式,但這可能適用於單詞之間的破折號:

g/^-/s/\w\@<!-/g