"{register}p
не будет работать, как вы описываете. Это заменит выбор с содержанием регистра. Вместо этого вам придется сделать что-то вроде:
" I haven't found how to hide this function (yet)
function! RestoreRegister()
let @" = s:restore_reg
return ''
endfunction
function! s:Repl()
let s:restore_reg = @"
return "p@=RestoreRegister()\<cr>"
endfunction
" NB: this supports "rp that replaces the selection by the contents of @r
vnoremap <silent> <expr> p <sid>Repl()
Что должно быть хорошо, если вы не используете плагин, у которого есть vmap, отличный от nore, для p, и который ожидает, что регистр будет перезаписан.
Этот код доступен в виде скрипта там . Инго Каркат также определил плагин , решающий ту же проблему.