Мне пришлось создать резервную копию позиции курсора, чтобы заставить это работать должным образом, когда текст следовал за выделением:
function! Test()
"yank current visual selection to reg x
normal! gv"xy
"get current column position
let cursor_pos = getpos('.')
"subtract 1
let cursor_pos[2] = cursor_pos[2] - 1
"put new string value in reg x
" would do your processing here in actual script
let @x = @x . 'more'
"re-select area and delete
normal gvd
"set cursor back one
call setpos('.', cursor_pos)
"paste new string value back in
normal "xp
endfunction
Может быть, другие имеют функцию вставки Vim, настроенную иначе, чем я, но если я не использовал это,выделенный / измененный текст будет сдвигаться вперед при вставке.
Обновление: это, к сожалению, не будет работать с текстом, выделенным в начале строки.