2017-07-14 83 views
4

我有以下文字:VIM重复的模式在替换命令

Lang1 
Lang2 
Lang3 

现在,我想喜欢的模式,以取代各行中的所有文本:

{ DisplayName: DispName(Lang1), Value: Lang1 }, 
{ DisplayName: DispName(Lang1), Value: Lang2 }, 
{ DisplayName: DispName(Lang1), Value: Lang3 }, 

现在怎么办我用vim命令替换实现了这一点,我可以得到::%s/*$/\{\ DisplayName\:\ DispName\(Lang1\)\,\ Value\:\ Lang1\}\,/,用Lang1替换每一行,然后用2,3,4等代替单个1,但我不想这样做。我想要一个替代命令来选择模式并重复它。如何实现这一目标?

回答

5

您可以使用:

:%s/.*/{ DisplayName: DispName(&), Value: &},/ 

这里&是使用.*完全匹配的字符串的反向引用。如果你想更具体的,那么你可以使用这个表达式,而不是.*

{ DisplayName: DispName(Lang1), Value: Lang1}, 
{ DisplayName: DispName(Lang2), Value: Lang2}, 
{ DisplayName: DispName(Lang3), Value: Lang3}, 

^Lang[0-9]*$ 
+1

这正是我一直在寻找这将与此内容替换给定的内容。我知道我们可以重复该模式,但无法从Google中找到它。 “&”和“back-reference”是我在谷歌查询中丢失的条款。 –