Tetapkan perintah khusus untuk register * dan +

9

Jika saya menggunakan build Vim dengan xterm_clipboardfitur tersebut maka konten clipboard sistem tersedia melalui +register.

Jika build yang saya gunakan tidak memiliki fitur ini, dapatkah saya membuat "+register memanggil program kustom saya untuk mengambil dan mengatur clipboard sistem ( xsel -bodan xsel -bi, atau juga dengan xclip)? Begitu juga dengan "*menelepon xsel -podan xsel -pi.

Intinya adalah untuk dapat mengetikkan sesuatu seperti "+ptanpa harus khawatir apakah fitur tersebut tersedia. Mengetik :r !xsel -b<Enter>adalah bukan apa yang saya cari: Saya ingin penekanan tombol yang sama untuk bekerja, dan saya ingin pasta varian untuk mengikuti apa yang tersedia untuk “benar” register ( P, gp, ...).

Bonus: dapatkah saya menentukan perintah khusus untuk nama register lain?

Gilles 'SANGAT berhenti menjadi jahat'
sumber

Jawaban:

7

Beberapa <expr>pemetaan harus dapat melakukan pekerjaan di sini. Struktur dasar akan menjadi

function! ClipboardOrXclip(command, register)
    if a:register !~ '[+*]' || has('xterm_clipboard') || has('gui_running')
        " Just return the original command if the clipboard is accessible
        " or it's not a register that should be handled by xsel
        return a:command
    endif
    if a:register == '+'
        return "<Esc>:r !xsel -bo<CR>"
    else
        return "<Esc>:r !xsel -po<CR>"
    endif
endfunction

nnoremap <silent> <expr> p ClipboardOrXclip('p', v:register)

Fungsi akan perlu diperluas untuk menangani semua variasi p, P, gp, dll tapi ini harus menjadi awal yang baik.

jamessan
sumber
Ini tampaknya berada di jalur yang benar, tetapi tidak berfungsi. Polos p(tanpa nama sebelumnya "dan daftar) tidak melakukan apa pun selain "ptampilan yang muncul di baris status. "apsetara dengan a, "bpbeep, ... Saya tidak mengerti logikanya. "+berbunyi bip segera, saya bahkan tidak bisa mengatakan maksud saya +atau *sebagai nama register.
Gilles 'SANGAT berhenti menjadi jahat'
1
Dengan asumsi masalah mendasar ini terpecahkan, apakah ada daftar lengkap perintah yang harus saya timpa? Set ini terlihat menakutkan, terutama jika saya ingin mendukung menyentak juga.
Gilles 'SANGAT berhenti menjadi jahat'
@Gilles Diperbarui untuk memperbaiki perilaku dengan register non - + / *. Masalah dengan "+saat vim Anda memiliki -xterm_clipboardlebih sulit karena tidak pernah sampai ke fungsi ini. Menentukan register yang tidak valid ( +) membatalkan perintah. JADI, kelihatannya perilaku ini sebenarnya harus dibalik sehingga memetakan "+atau "*dan kemudian menangani perintah yang ditentukan oleh pengguna ...
jamessan