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, а затем заменить отдельные 1 на 2, 3, 4 и т. д. Но я не хочу этого делать. Я хочу, чтобы одна команда замены выбирала шаблон и повторяла его. Как этого добиться?


person Sankar    schedule 14.07.2017    source источник


Ответы (1)


Вы можете использовать:

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

Здесь & — это обратная ссылка на полную совпадающую строку с использованием .*. Это заменит данный контент этим контентом:

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

Если вы хотите быть более конкретным, вы можете использовать это регулярное выражение вместо .*:

^Lang[0-9]*$
person anubhava    schedule 14.07.2017
comment
Это именно то, что я искал. Я знаю, что мы могли бы повторить шаблон, но не смогли найти его в Google. & и обратная ссылка были терминами, которых мне не хватало в моем запросе Google. - person Sankar; 14.07.2017