function! s:nopaste(visual) if a:visual silent normal! gv:!nopaste else let l:pos = getpos('.') silent normal! :%!nopaste endif silent normal! "+yy let @* = @+ silent undo " can't restore visual selection because that will overwrite "* if !a:visual call setpos('.', l:pos) endif echo @+ endfunction nnoremap p :call nopaste(0) xnoremap p :call nopaste(1)