Acabei de descobrir sobre a existência do Vimscript a partir de hoje, então me perdoe se essa pergunta for mais básica do que parece, mas tenho lutado para encontrar uma resposta para essa pergunta durante a maior parte do dia .
Eu estou trabalhando em um arquivo no vim onde eu tenho que fazer um grande número de ações repetidas. Por exemplo, meu arquivo é parecido com isto:
firstname
secondname
thirdname
fourthname
fifthname
sixthname
...
A lista continua, e o que eu gostaria de fazer é anexar uma string fixa ao final de cada linha, de modo que cada linha termine com um número crescente, ou seja:
firstname = _first1
secondname = _first2
thirdname = _first3
fourthname = _first4
fifthname = _first5
sixthname = _first6
...
Eu sei que poderia escrever um pequeno script para resolver esse problema, mas fui atraído pela perspectiva de usar o vimscript para fazer tudo dentro do vim, e essa é uma habilidade que eu gostaria de adquirir. Até agora eu trabalhei uma função como tal para rodar no modo de comando do vim:
:let i=1 | g/name/s//\=i/ | let i=i+1
O que parece promissor, já que o resultado é quase o que eu quero:
first1
second2
third3
fourth4
fifth5
sixth6
...
Mas não importa como eu tentei modificá-lo, não consigo imprimir uma string (= _first) seguida do número incrementado. Por exemplo, isso ...
:let i=1 | g/name/s//name = _first\=i/ | let i=i+1
Produz isso.
firstname = _first=i
secondname = _first=i
thirdname = _first=i
fourthname = _first=i
fifthname = _first=i
sixthname = _first=i
...
e isso ...
:let i=1 | execute 'g/name/s//name = _first' . i . '/' | let i=i+1
Produz isso.
firstname = _first1
secondname = _first1
thirdname = _first1
fourthname = _first1
fifthname = _first1
sixthname = _first1
...
Eu tentei outras combinações, mas neste momento eu estou praticamente esfaqueando no escuro. Tudo que eu tento parece obter uma variável de incremento sem string, ou uma string com uma variável estática. Como eu poderia fazer isso com o vimscript?
Editar:
Estou dando a resposta correta para Ingo Karkat, pois isso me levou diretamente a como resolver meu problema. Para a posteridade, aqui está o código que acabei usando:
:let i=1 | 1156,1271g/$/s//\=' = _first' . i/ | let i=i+1
produzindo:
firstname = _first1
secondname = _first2
thirdname = _first3
fourthname = _first4
fifthname = _first5
sixthname = _first6
...
As únicas pequenas diferenças no meu código (projeto específico) eram que ele operava apenas nas linhas 1156 a 1271 e era anexado ao final da linha sem substituir nenhum texto.