2014-04-22 26 views
1

閱讀完大約Vim regexs後,我的頭很疼。Vim:將單詞的結尾全局啓動

我想改變這一切的話_bar結束到開始bar_

因此,例如:

var variable_foo = "foo", 
    more_foo = "foo"; 

將成爲:

var foo_variable = "foo", 
    foo_more = "foo"; // New variable names 

我知道答案將涉及:%s/<something>/<something else>/g

答案應該是健壯的編碼風格的字邊界是這樣的:

(inside_parens_foo) 

變化

(foo_inside_parens) 
+0

用':%s/\ (\ r \ + \)_ \(\ w \ + \)/ \ 2_ \ 1/g'如[Peter Rincker](http://stackoverflow.com/users/438329/peter-rincker)所建議的。 – devnull

回答

4

由於@devnull說你需要使用反向引用:

:%s/\(\w\+\)_\(\w\+\)/\2_\1/g 

使用\w來捕獲像字符的字,[0-9A-Za-z_]。我還建議使用c標誌來確認更改。

由於@benjifisher說明使用\v打開 「非常神奇」 將減少線路噪聲:

:%s/\v(\w+)_(\w+)/\2_\1/g 

如需更多幫助,請參見:

:h :s_c 
:h \1 
:h /\w 
:h /\+ 
:h /\v 
+0

這是一個夢幻般的答案。你能夠添加一些關於'+'符號的功能嗎? (或者如何找到幫助?)然後它會完成! – LondonRob

+0

「+」是一個正則表達式量詞。這意味着一次或多次。我建議你看vim正則表達式信息的':h pattern'。我建議你尋找一些正則表達式教程,或者至少這[SO帖子](http://stackoverflow.com/a/2759417/438329)。 –