WSL पर विम: सिस्टम क्लिपबोर्ड को सिंक्रनाइज़ करें? (सेट क्लिपबोर्ड ^ = अनाम)?


12

विंडोज के लिए डब्ल्यूएसएल / बैश का उपयोग करते समय मैं उपयोग करने में सक्षम होना चाहता हूं y yy 3yऔर pउसी तरह वे हमेशा विम में काम करते हैं, लेकिन सभी ऐप द्वारा साझा किए गए सिस्टम क्लिपबोर्ड से कनेक्ट करते हैं, आंतरिक क्लिपबोर्ड को नहीं करने के लिए ... मेरे पास पहले से ही कीबोर्ड का प्रबंधन करने के लिए डिट्टो है। इतिहास।

ऐसा लगता है कि विम के पास सिस्टम क्लिपबोर्ड के साथ कॉपी / पेस्ट बफर को सिंक्रनाइज़ करने के लिए पहले से ही निर्मित विकल्प है ... फिर भी डब्ल्यूएसएल चलाते समय समस्या यह है कि आपको वास्तव /mnt/c/Windows/System32/clip.exeमें क्लिपबोर्ड तक पहुंचने के लिए उपयोग करने की आवश्यकता है ... इसलिए भले ही मैं चाहूं उपयोग करने में सक्षम होने के लिए:

set clipboard^=unnamed

यह WSL समर्थन अभी तक नहीं लगता है।

मैं समझता हूं कि नवगीत के पास यह एक विकल्प के रूप में है, लेकिन मैं अभी नवोन्मेष के साथ प्रयोग नहीं करना चाहता ...

अभी के लिए, मैंने पाया है कि एक वैकल्पिक हल के लिए निकटतम बात है:

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>

लेकिन यह मेरी राय में एक बहुत ही भयानक समाधान है ... यह दो-चरणों की प्रक्रिया की नकल करता है ...

बेशक मैं माउस / शिफ्ट + इन्स के साथ कुछ कॉपी और पेस्ट कर सकता हूं, फिर भी मुझे लगता है कि विम में ठीक से काम करने के लिए इस सिंक्रनाइज़ेशन को प्राप्त करने का एक तरीका होना चाहिए।


इस समाधान की सिफारिश करें superuser.com/a/1439881/711405
ephemerr

नियोविम का उपयोग करने वालों के लिए जो इस प्रश्न को देखते हैं, github.com/neovim/neovim/wiki/… देखें ।
एंड्री काइपोव

जवाबों:


10

मुझे पता है कि यह एक बहुत पुराना सवाल है लेकिन मुझे हाल ही में एक अच्छा समाधान मिला है। बहुत हताशा के बाद, मैं कॉपी और पेस्ट करके विंडोज़ सिस्टम क्लिपबोर्ड तक पहुंचने के लिए इन तरीकों से आया था।

नकल के रूप में, vim संस्करण के साथ = = 8.0.1394, जैसा कि एक अन्य जवाब में नोट किया गया है 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

चखना, नकली रजिस्ट्री आदेशों की मैपिंग, अर्थात "= p या" + p या जो भी हो।

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>

यदि आप माउस का उपयोग नहीं करना चाहते हैं तो राइट-क्लिक पेस्टिंग कार्य करता है, लेकिन असंतोषजनक है


WSL पर viमैंने जोड़ा हैnnoremap <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>(जो काम नहीं करता ...)
ट्रोपिलियो

4

इस बारे में क्या?

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

unameएक Linux टर्मिनल कमांड है जो OS जानकारी लौटाता है, जैसे कि यह LinuxWSL के लिए लौटेगा । जबकि -rध्वज के साथ , कमांड OS की सूचना को लौटाता है, इस प्रकार इसमें "विंडोज" शामिल होना चाहिए।

TextYankPostएक vim घटना है (देखें :h TextYankPostमें vim) है, जो अपने पाठ झटका गतिविधि का पता लगाने।

clip.exeWSL में एक Windows कमांड प्रॉम्प्ट की कमांड है ( CLIP /?कमांड प्रॉम्प्ट में देखें ) जो क्लिपबोर्ड में कॉपी textया रिटर्न के commandमाध्यम से text | clip.exeया command | clip.exe। यहाँ clip.exevim फ़ंक्शन द्वारा विम से निष्पादित किया जाता है system


के has('wsl')बजाय उपयोग कर सकते हैं system('uname -r') =~ "Microsoft"
जस्टिन एम। कीज

2

मैंने कुछ समय पहले fakeclip को WSL समर्थन के लिए PR बनाया है ।

इसे स्थापित करने के तरीके पर अस्पष्ट देखें ; help fakeclipउपयोग के लिए।


अभी भी बनाए रखा है?
क्रिस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.