Ответ 1
Существует не встроенная функция такого типа.
Позвольте мне предложить функцию, которая повторяет команду (например, .
повторение последней
команда изменения) в положениях заданных меток. Обе метки и команда
заданные как строковые аргументы. Знаки, указанные в пути, варьируются в регулярном
выражений или спецификатора scanf
-формата. Например, za-dx
означает метки z
, a
, b
, c
, d
, x
.
function! MarksRepeat(marks, command)
let pos = 0
let len = strlen(a:marks)
let alpha = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
let beta = '1234567899bcdefghijklmnopqrstuvwxyzzBCDEFGHIJKLMNOPQRSTUVWXYZZ'
while pos < len
if a:marks[pos + 1] != '-'
exe 'norm `' . a:marks[pos] . a:command
let pos += 1
elseif a:marks[pos] <= a:marks[pos+2]
let mark = a:marks[pos]
let stop = a:marks[pos+2]
if mark =~ '[0-9a-zA-Z]' && stop =~ '[0-9a-zA-Z]'
while 1
exe 'norm `' . mark . a:command
if mark == stop
break
endif
let mark = tr(mark, alpha, beta)
endwhile
endif
let pos += 3
endif
endwhile
endfunction
В вашем случае эту функцию можно использовать следующим образом.
- Отметьте все места для одновременных вставок (кроме одного) с помощью Vim
меток (с помощью команды
m
). - Собственно вставьте текст в одно место, которое не было отмечено.
-
Запустите функцию:
:call MarksRepeat(‹marks›, '.')