我試圖在VIM中用「=」代替所有多個「 - 」字符(來自行的開始處)「Vim正則表達式替換問題
p.e.將「-----」替換爲「=====」
或將「----------」替換爲「==========」
I創建此正則表達式:
%s/^-\{2,}/= ????/g
有誰知道我可以如何複製「=」替換? (我有什麼「=」後面放)
我試圖在VIM中用「=」代替所有多個「 - 」字符(來自行的開始處)「Vim正則表達式替換問題
p.e.將「-----」替換爲「=====」
或將「----------」替換爲「==========」
I創建此正則表達式:
%s/^-\{2,}/= ????/g
有誰知道我可以如何複製「=」替換? (我有什麼「=」後面放)
試試這個:
:%s/^-\{2,}/\=substitute(submatch(0), '-','=','g')/
或:
:%s/^-\{2,}/\=repeat('=',len(submatch(0)))/
詳情請參閱:help sub-replace-\=
。
我敢肯定有一個更好的答案,但實際來看,我想這樣做,因爲只是爲了簡單起見,兩個獨立的操作:
%s/--/==/g
%s/=-/==/g
第一更換所有雙出現,這會變成-----
成====-
。然後修復使用第二剩菜(=-
)。我希望能看到更優雅的答案,不過,如果有可能的事情。
技術上,%s/-/=/g
做這項工作,但在整個文件中,每-
。
如果你想替換也開始-
行我會做這種方式:
g/^-/s/-/=/g
或者,如果你有第一-
之前的一些空間:
g/^\s*-/s/-/=/g
剩下的問題到達這樣的:
----------- the-composite-word
他們變成:
=========== the=composite=word
爲了解決這個問題,有很多方式。我不是那個主人建議一個非常一般的方式,但這可能適用於單詞之間的破折號:
g/^-/s/\w\@<!-/g
非常感謝所有人:) – Reman 2011-03-16 19:12:05