vim 在替换命令中重复一个模式

vim repeat a pattern in a replace command

我有以下文字:

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,然后将各个 1 替换为 2、3 , 4, 等等 但我不想那样做。我想要一个单一的替代命令 select 模式并重复它。如何实现?

您可以使用:

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

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

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

如果你想更具体,那么你可以使用这个正则表达式而不是 .*:

^Lang[0-9]*$