WSL'deki Vim: sistem panosunu senkronize et? (pano ^ = adsız olarak ayarlandı)?


12

Wsl kullanırken / Windows I için Bash kullanabilmek istiyorum y yy 3yve paynı şekilde her zaman vim çalışır, ancak tüm uygulamalar tarafından paylaşılan sistem panosuna bağlanarak değil, Vim iç panoya ... Zaten panoya yönetmek için ditto var Tarih.

Görünüşe göre Vim, kopyala / yapıştır arabelleğini sistem panosuyla senkronize etmek için yerleşik bir seçeneğe sahip ... Görünüşe göre WSL'yi çalıştırırken sorun aslında /mnt/c/Windows/System32/clip.exepanoya erişmek için kullanmanız gerektiğidir ... kullanabilmek için:

set clipboard^=unnamed

Henüz WSL desteği yok gibi görünüyor.

Neovim'in buna bir seçenek olduğunu anlıyorum, ama şu anda neovim ile gerçekten denemek istemiyorum ...

Şimdilik bulduğum bir geçici çözüm için en yakın şey:

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>

Ama bu bence gerçekten korkunç bir çözüm ... Kopyalamayı iki adımlı bir süreç haline getiriyor ...

Tabii ki fare / shift + ins ile bazı kopyalayıp yapıştırabilirim, ancak bu senkronizasyonun Vim'de düzgün çalışması için bir yol olması gerektiğini düşünüyorum.


Bu çözümü tavsiye et superuser.com/a/1439881/711405
ephemerr

Bu soruyu bulduğunu Neovim kullananlar için bkz github.com/neovim/neovim/wiki/... .
Andrey Kaipov

Yanıtlar:


10

Bunun çok eski bir soru olduğunu biliyorum ama son zamanlarda iyi bir çözüm buldum. Çok hayal kırıklığı sonra, kopyalayıp yapıştırarak windows sistem panoya erişmek için bu yollarla karşılaştım.

Başka bir cevapta belirtildiği gibi vim sürümü> = 8.0.1394 ile kopyalayarak https://vi.stackexchange.com/a/15190

let s:clip = '/mnt/c/Windows/System32/clip.exe' 
if executable(s:clip)
    augroup WSLYank
        autocmd!
        autocmd TextYankPost * call system('echo '.shellescape(join(v:event.regcontents, "\<CR>")).' | '.s:clip)
    augroup END
end

Yapıştırma, sahte kayıt defteri komutlarına eşleme, yani "= p veya" + p veya her neyse.

map <silent> "=p :r !powershell.exe -Command Get-Clipboard<CR>
map! <silent> <C-r>= :r !powershell.exe -Command Get-Clipboard<CR>

" I thought this will be better :)
noremap "+p :exe 'norm a'.system('/mnt/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe -Command Get-Clipboard')<CR>

Sağ tıklama yapıştırma işe yarar, ancak fareyi kullanmak istemiyorsanız tatmin edici değildir


WSL'de viekledimnnoremap <S-Insert> :r !powershell.exe -Command "& {Get-Clipboard}"<Enter>
Walter A

Yararlı cevap için teşekkürler! Yank komutu için sahte bir kayıt kullanmanın mümkün olup olmadığını merak ediyordum. Gibi bir şey noremap "+y :exe 'norm a'.system('echo '.shellescape(join(v:event.regcontents, "\<CR>")).' | clip.exe')<CR>(işe yaramaz ...)
Tropilio

4

Peki buna ne dersin?

if system('uname -r') =~ "Microsoft"
  augroup Yank
    autocmd!
    autocmd TextYankPost * :call system('clip.exe ',@")
  augroup END
endif

unameLinuxWSL için dönecek şekilde işletim sistemi bilgilerini döndüren bir Linux terminal komutudur . İle Halbuki -rbayrak, komut döner böylece "Windows" içermelidir, OS bilgileri.

TextYankPostBir vim olay (bkz olduğu :h TextYankPostiçinde vimmetin yank aktivite tespit).

clip.exeWSL bir Windows komut istemi komut (bkz olduğunu CLIP /?kopyalama komutu istemi olarak) textbir veya iade commandyoluyla clipbord içine text | clip.exeveya command | clip.exe. Burada clip.exevim vim fonksiyonu tarafından çalıştırılır system.


Neovim'de has('wsl')bunun yerine kullanabilirsiniz system('uname -r') =~ "Microsoft".
Justin M. Keyes

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.