Я часто использую следующее:
" Tip #470 : Piet Delport & Anthony (ad_scriven)
vnoremap <silent> g" <esc>:call <sid>SwapVisualWithCut()<cr>
function! s:SwapVisualWithCut()
normal! `.``
if line(".")==line("'.") && col(".") < col("'.")
let c = col('.')
normal! gvp```]
let c = col('.') - c
normal! ``
:silent call cursor(line("."),col(".")+c)
normal! P
else
normal! gvp``P
endif
endfunction
Идея состоит в том, чтобы удалить что-либо в любом месте, затем выбрать символы в другом месте и нажать g"
, чтобы поменять удаляемые символы на недавно выбранные.