vim在replace命令中重复一个模式

San*_*kar 4 regex vim macvim neovim

我有以下文字:

Lang1
Lang2
Lang3
Run Code Online (Sandbox Code Playgroud)

现在我想用以下模式替换每行中的所有文本:

{ DisplayName: DispName(Lang1), Value: Lang1 },
{ DisplayName: DispName(Lang1), Value: Lang2 },
{ DisplayName: DispName(Lang1), Value: Lang3 },
Run Code Online (Sandbox Code Playgroud)

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

anu*_*ava 5

您可以使用:

:%s/.*/{ DisplayName: DispName(&), Value: &},/
Run Code Online (Sandbox Code Playgroud)

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

{ DisplayName: DispName(Lang1), Value: Lang1},
{ DisplayName: DispName(Lang2), Value: Lang2},
{ DisplayName: DispName(Lang3), Value: Lang3},
Run Code Online (Sandbox Code Playgroud)

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

^Lang[0-9]*$
Run Code Online (Sandbox Code Playgroud)