Если значения подстановки отличаются только числами на концах, используйте команду
:let n=[0] | %s/|/\='new'.map(n,'v:val+1')[0]/g
(см. мой ответ на вопрос " gVim найти / заменить счетчиком "для подробного описания метода.)
В случае значений подстановки, которые существенно отличаются друг от друга, измените команду, чтобы заменить не серийный номер вхождения, а элемент списка заменыс этим номером в качестве индекса.
:let n=[-1] | %s/|/\=['one','two','three'][map(n,'v:val+1')[0]]/g
Чтобы выполнить подстановки в каждой строке независимо друг от друга, используйте команду :global
, чтобы выполнить одну из вышеуказанных команд по строкам буфера.
:g/^/let n=[0] | s/|/\='new'.map(n,'v:val+1')[0]/g
Аналогично,
:g/^/let n=[-1] | s/|/\=['one','two','three'][map(n,'v:val+1')[0]]/g