2011-06-04 75 views
1

假設下面的示例內註釋:VIM正則表達式匹配直列評論

/* 
function newMethodName (int bar, String s) { 
    int i = 123; 
} 
s/\<foo\s*(/newMethodName (/g 
*/ 

我將如何匹配和替換使得它將基本上,成爲註釋。在放棄之前,我已經做到了這一點。

:%s/\/\*\(\_.\)*\*\//\1/ 

:%s/\/\*\(\_.*\)\*\//\1/ 

回答

1

你的捕獲組()被捕獲一個字符或換行符。把下面的*放在裏面,以便\ 1替換得到整個字符串,而不僅僅是第一個字符。

+1

作爲澄清其他人的一點,因爲我花了一些時間來理解您的答案,所以需要將*移到捕獲組中。所以命令成爲':%s/\/\ * \(\ _。* \)\ * \ // \ 1 /'。有趣的是:'%s/\/\ * \(\ _。\ + \)* \ * \ // \ 1 /'也可以工作(至少在這個例子中)。或許一個不像我一樣累的人可以解釋爲什麼(因爲我沒有線索)。 – cledoux 2011-06-04 02:44:52

+0

感謝您的澄清。 [有時我在空閒時間閱讀/張貼手機,並輸入標點符號不方便。]因此'\(\ _。\)*'創建儘可能多的捕獲組, ,'\(\ _。* \)'創建一個匹配零個或多個字符運行的捕獲組「\ 1」。 – karmakaze 2011-06-04 03:35:22

+0

謝謝karmakaze! karategeek6,使用\ +而不是掛在vim上(在一個贏盒上);似乎應該有效,但由於某種原因沒有。我將不得不在稍後的'nix盒子上試試它。 – Rob 2011-06-04 14:55:44