vim在替换命令

时间:2017-07-14 17:56:51

标签: regex vim macvim neovim

我有以下文字:

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。但是我不想那样做。我想要一个替换命令来选择模式并重复它。怎么做到这一点?

1 个答案:

答案 0 :(得分:5)

您可以使用:

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

此处&是使用.*的完整匹配字符串的反向引用。这将用以下内容替换给定内容:

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

如果您想更具体一点,那么您可以使用此正则表达式而不是.*

^Lang[0-9]*$