Вот примерно то, что я пытаюсь сделать в VIM
:let g:ID = 1
:%s/^/\= g:ID | let g:ID = g:ID * 1.2/
Теперь, похоже, vim разрушает все после бара (то есть часть let g:ID = g:ID * 1.2
.
Конечно, я мог бы написать функцию, которая умножает g:ID на 1.2 и возвращает значение g:ID, но я бы хотел отказаться от этого.
Спасибо рене
отредактируйте для ясности:
В vim-script я могу написать несколько операторов в одной строке, если использую строку (|) для их цепочки. Итак, вместо
let g:ID = 20
let g:ID = g:ID * 1.2
let g:ID = g:ID * 1.2
Я мог бы также написать
let g:ID = 20 | let g:ID = g:ID * 1.2 | let g:ID = g:ID * 1.2
Теперь \= thingy позволяет мне заменить регулярное выражение выражением сценария vim. Например, я мог бы сделать
:%s/ABC/\=line(".")/
который заменит каждый случай ABC в моем текущем буфере номером строки, на которой он найден.
Точно так же
:%s/^/\=g:ID/
написал бы текущее значение g:ID в начале каждой строки в моем буфере.
Это все прекрасно, но я бы хотел, чтобы в запасной части было более одного выражения, и мне было интересно, смогу ли я достичь этого, связав такие выражения с чертой. В моем случае я хотел бы манипулировать g:ID после каждого вызова подстановки, следовательно
:let g:ID=20
:s/^/\=g:ID|let g:ID=g:ID * 1.2/
приведет к записи 20 в начале первой строки в моем буфере, 24 в начале второй строки в моем буфере, 28,8 в начале третьей строки в моем буфере и так далее.
Надеюсь, теперь я прояснил себя.