1. ホーム
  2. vim

[解決済み] レジスタを上書きせずに貼り付ける方法

2022-07-20 05:01:46

質問

選択範囲をデフォルトのレジスタに配置することなく、視覚的に選択された領域の上に貼り付ける方法をご存知の方はいらっしゃいますか?

常に明示的なレジスタからペーストすることによって問題を解決できることは知っています。しかし、以下のように入力するのは首が痛くなります。 " x p ではなく、単に p

どのように解決するのですか?

"{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()

pにnon-nore vmapを持つプラグインや、上書きされるレジスタを期待するプラグインを使用しない限りは、問題ないはずです。

このコードはスクリプトとして利用可能です。 そこで . また、Ingo Karkat は プラグイン を定義し、同じ問題を解決しています。