107.08.29 vim 選取模式下貼上不要剪下選取部分

如標題,想簡單描述卻偏複雜
問題是這樣的
當用 v (選取)一些字後,想用 p (貼上)剛剛用 y (複製)下來的東西
但是 vim 在做完 p 後會自動把選取的字 d (剪下)
導致下次 p 時,會貼到剛剛被覆蓋的字

如下範例,第二次用 p 時,正常預期結果是 aaa 但實際卻是 bbb
aaa ---> y 複製
bbb ---> p 貼上 ---> aaa
ccc ---> p 貼上 ---> bbb


解決:
開啟 .vimrc,貼上:
" Ref: https://stackoverflow.com/a/290723/6734174
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()

主要做的事就是在貼上前先把目前暫存器的值儲存下來
貼上的動作完成後再把內容回復

參考資料:
How to paste over without overwriting register

沒有留言:

張貼留言

^ Top