2012-08-16 123 views
6

我常常想這樣的搜索和替換在vim:Vim的搜索和替換效率

:%s/<search_pattern>/<search_pattern>_foo/g 

有沒有辦法讓這個語法更有效,這樣我可以參考的替代值<search_pattern>?我認爲這是類似於通過組名稱/號碼反向引用的內容,但我無法在此找到任何文檔。

回答

13

使用&字符來表示在更換匹配的模式:

:%s/<search_pattern>/&_foo/g 

或者您可以使用\0,這是整個匹配的模式反向引用,因此可能更容易記住:

:%s/<search_pattern>/\0_foo/g 

:help sub-replace-special

而且,由於@kev,喲u能在使用\zs,搜索字符串的結束迫使空模式被__foo_在替換替換:

:%s/<search_pattern>\zs/_foo/g 

這意味着:替換__foo_搜索字符串的結尾。

+3

':%s/ \ ZS/_foo/g'作品太。 – kev 2012-08-16 18:09:28

3

您可以對整個搜索模式使用&,也可以使用組匹配模式的一部分。使用&

:%s/<search_pattern>/&_foo/g 

這將完成您正在尋找的內容。如果你需要一些更復雜的使用組。要創建一個組,使用(轉義)括號來包圍部分搜索模式。然後您可以參考\n,其中n是組號碼。一個例子會更好地解釋它。

您有以下文件:

bread,butter,bread,bread,bread,butter,butter,etc 

你想要的bread,butter任何實例更改爲bread and butter

:%s/\(bread\),\(butter\)/\1 and \2/g