Saat menggunakan WSL / Bash untuk Windows saya ingin dapat menggunakan y
yy
3y
dan p
cara yang sama mereka selalu bekerja di vim, tetapi menghubungkan ke clipboard sistem yang dibagikan oleh semua aplikasi, bukan ke clipboard internal vim ... Saya sudah punya untuk mengelola clipboard sejarah.
Tampaknya Vim sudah memiliki opsi bawaan untuk menyinkronkan copy / paste buffer dengan clipboard sistem ... Namun masalah ketika menjalankan WSL adalah bahwa Anda benar-benar perlu menggunakan /mnt/c/Windows/System32/clip.exe
untuk mengakses clipboard ... Jadi meskipun saya ingin untuk dapat menggunakan:
set clipboard^=unnamed
Tampaknya belum memiliki dukungan WSL.
Saya mengerti neovim memang memiliki ini sebagai pilihan, tetapi saya tidak benar-benar ingin bereksperimen dengan neovim sekarang ...
Untuk saat ini, hal yang paling dekat dengan solusi yang saya temukan adalah:
nnoremap <silent> <leader>y :call system('/mnt/c/Windows/System32/clip.exe', @0)<CR>
vnoremap <silent> <leader>y :call system('/mnt/c/Windows/System32/clip.exe', @0)<CR>
Tapi ini adalah solusi yang benar-benar mengerikan menurut saya ... Itu membuat menyalin proses dua langkah ...
Tentu saja saya dapat melakukan beberapa copy dan paste dengan mouse / shift + in, namun saya pikir pasti ada cara untuk mendapatkan sinkronisasi ini agar berfungsi dengan baik di Vim.
sumber
Jawaban:
Saya sadar ini adalah pertanyaan yang sangat lama tetapi saya baru-baru ini menemukan solusi yang baik. Setelah frustrasi, saya menemukan cara-cara ini untuk mengakses clipboard sistem windows dengan menyalin dan menempel.
Dengan menyalin, dengan versi vim> = 8.0.1394, seperti disebutkan dalam jawaban lain https://vi.stackexchange.com/a/15190
Menempelkan, memetakan ke perintah registri palsu, yaitu "= p atau" + p atau apa pun.
Menyisipkan klik kanan berfungsi, tetapi tidak memuaskan jika Anda tidak ingin menggunakan mouse
sumber
vi
saya telah menambahkannnoremap <S-Insert> :r !powershell.exe -Command "& {Get-Clipboard}"<Enter>
noremap "+y :exe 'norm a'.system('echo '.shellescape(join(v:event.regcontents, "\<CR>")).' | clip.exe')<CR>
(yang tidak berfungsi ...)Bagaimana dengan ini?
uname
adalah perintah terminal Linux yang mengembalikan info OS, sehingga akan kembaliLinux
untuk WSL. Sedangkan dengan-r
flag, perintah mengembalikan info rilis OS, sehingga harus menyertakan "Windows".TextYankPost
adalah acara vim (lihat:h TextYankPost
divim
), yang mendeteksi aktivitas penarikan teks Anda.clip.exe
adalah perintah command prompt Windows di WSL (lihatCLIP /?
di command prompt) yang menyalintext
atau kembali daricommand
clipbord melaluitext | clip.exe
ataucommand | clip.exe
. Di siniclip.exe
dijalankan dari fungsi vim demi vimsystem
.sumber
has('wsl')
bukansystem('uname -r') =~ "Microsoft"
.Saya telah membuat PR untuk dukungan WSL ke fakeclip beberapa waktu lalu.
Lihat vimawesome tentang cara menginstalnya;
help fakeclip
untuk penggunaan.sumber