O que segue é mais ou menos o que estou tentando fazer no vim
:let g:ID = 1
:%s/^/\= g:ID | let g:ID = g:ID * 1.2/
Agora, parece que o vim desconsidera tudo depois do bar
(essa é a parte let g:ID = g:ID * 1.2
.
Eu poderia escrever uma função que multiplica g: ID
com 1.2 e retorna o valor de g: ID, mas eu gostaria de
renunciar a isso.
Obrigado
René
editar para maior clareza:
No script vim, posso escrever várias instruções na linha uma se eu usar a barra (|) para encadear as mesmas. Então, ao invés de
let g:ID = 20
let g:ID = g:ID * 1.2
let g:ID = g:ID * 1.2
Eu também posso escrever
let g:ID = 20 | let g:ID = g:ID * 1.2 | let g:ID = g:ID * 1.2
Agora, o thingy \ = permite-me substituir uma expressão regular por uma expressão de script vim. Por exemplo, eu poderia fazer um
:%s/ABC/\=line(".")/
que substituiria todas as ocorrências de ABC em meu buffer atual com o número da linha na qual ele é encontrado.
Da mesma forma, um
:%s/^/\=g:ID/
gravaria o valor atual de g: ID no início de cada linha no meu buffer.
Tudo bem, mas gostaria de ter mais de uma expressão na parte de substituição e queria saber se conseguiria isso encadeando essas expressões com a barra. No meu caso, gostaria de manipular g: ID após cada chamada de substituição,
daí
:let g:ID=20
:s/^/\=g:ID|let g:ID=g:ID * 1.2/
resultaria em escrever 20 no início da primeira linha no meu buffer, 24 no início da segunda linha no meu buffer, 28.8 no início da terceira linha no meu buffer e assim por diante.
Espero ter me tornado mais claro agora.