2012-04-26 72 views
28

例如,我有一個共同的前綴和後綴一堆值的,如:是否可以在VIM中使用查找和替換通配符字符串?

fooVal1Bar; 

fooVal2Bar; 

fooVal3Bar; 

在這種情況下,所有的變量名開始,並以結束foo並用Bar結束。我想使用fooBar之間的隨機變量名稱進行查找和替換。假設我已經有變量Val1,Val2,Val3Val1Old,Val2OldVal3Old定義。我會做一個找到一個替代,沿着線的東西:

:%s/foo<AnyString>Bar/foo<AnyString>Bar = <AnyString> + <AnyString>Old 

這將導致:

fooVal1Bar = Val1 + Val1Old; 

fooVal2Bar = Val2 + Val2Old; 

fooVal3Bar = Val3 + Val3Old; 

我希望這是明確的是我想做的事情,我無法找到任何東西vim幫助或聯機更換通配符字符串。我能找到的最多的就是搜索通配符字符串。

回答

41

我相信你想

:%s/foo\(\w\+\)Bar/& = \1 + \1\Old/ 

解釋:

\w\+找到一個字符中的一個或多個字符的字符串。前面的foo及以下Bar確保這些匹配字符正好在fooBar之間。

\(...\)存儲此字符,以便它們可以用於替換部分的替換。

&副本什麼匹配

\1是在\(....\)部分捕獲的字符串。

+0

有w^\ +和\之間的差異。*? – dwcanillas 2012-04-26 15:48:40

+7

'\ w \ +'匹配此集合中的一個或多個:a-zA-Z0-9_和'。*'匹配零個或多個任何內容。 – gpojd 2012-04-26 15:51:07

+0

好的。這就說得通了。謝謝! – dwcanillas 2012-04-26 15:55:26

2

您需要捕捉您想要保存的內容。嘗試是這樣的:

%s/\(foo\(\w\+\)Bar\);/\1 = \2 \2Old/ 

或者,您可以清理與magic一點點:

%s/\v(foo(\w+)Bar);/\1 = \2 \2Old/ 
相關問題