Vimはデフォルトレジスタ(")を上書きせずにシステムクリップボードにコピーします。

Vimはデフォルトレジスタ(

システムクリップボードにコピーを使用すると、選択した内容がデフォルト"+y+")レジスタだけでなくレジスタにもコピーされます。レジスタを+変更せずに内容をレジスタにコピーするにはどうすればよいですか。"

編集:これが予想される動作であることを理解しています。すべてのヤンキーは基本レジスタを変更します。解決策があるかどうかを知りたいです。

私は素朴な解決策を思い出しました。

ビジュアルモードの場合

vnoremap <Leader>y :<C-u>let @+=@*<CR>

単一行の場合

nnoremap <Leader>yy :<C-u>let @+=getline('.') . "\n"<CR>

しかし、私たちは多くの機能を見逃すでしょう。誰かがより良い解決策を持っていることを願っています。

ベストアンサー1

カスタム演算子を定義する必要があります。:help :map-operator詳細と例が提供されています。この機能を使用すると、ビジュアルモード(例を参照)とyyマッピング(使用v:count . 'yy')を簡単に実装できます。

プルによってプライマリレジスタが破損しないようにするには、次のエントリにこのレジスタを保存して復元するロジックを含めます。

let l:save_clipboard = &clipboard
set clipboard= " Avoid clobbering the selection and clipboard registers.
let l:save_reg = getreg('"')
let l:save_regmode = getregtype('"')
" some yank
call setreg('"', l:save_reg, l:save_regmode)
let &clipboard = l:save_clipboard

おすすめ記事