Vim Copy ke System Clipboard tanpa menimpa register default (")


4

Ketika saya gunakan "+yuntuk menyalin ke clipboard sistem, konten yang dipilih disalin ke +register serta register default ("). Bagaimana saya bisa memastikan bahwa konten disalin hanya ke +register tanpa memodifikasi "register?

EDIT: Saya sekarang mengerti bahwa ini adalah perilaku yang dimaksudkan dan setiap penarikan akan mengubah register default. Saya masih ingin tahu apakah ada solusi untuk ini.

Saya datang dengan solusi naif

untuk mode visual

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

dan untuk satu baris dalam

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

Tapi kita akan kehilangan banyak fitur menarik. Saya harap seseorang memberikan solusi yang lebih baik.

Jawaban:


1

Anda perlu mendefinisikan operator khusus; :help :map-operatormemiliki detail dan contoh. Dengan fungsi itu, Anda kemudian dapat juga dengan mudah menerapkan mode visual (sudah ditunjukkan dalam contoh) dan yypemetaan (gunakan v:count . 'yy') dengan mudah.

Untuk menghindari bahwa yank mengacaukan register default, bungkus logika berikut ini yang menyimpan dan mengembalikan register itu:

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.