मैं विम से सिस्टम क्लिपबोर्ड पर पाठ की प्रतिलिपि कैसे बना सकता हूं?


281

क्या सिस्टम क्लिपबोर्ड पर पाठ के ब्लॉक को कॉपी करने का एक तरीका है, इसलिए मैं इसे किसी अन्य प्रोग्राम में पेस्ट कर सकता हूं?


12
यह पहले ही SO पर पूछा और उत्तर दिया जा चुका है। आपको वहां और अधिक और भिन्न जानकारी मिल सकती है।
bsmith89

1
मैं macvim christoomey / vim-system-copy पर इस प्लगइन का उपयोग कर रहा हूं और वास्तव में इसे पसंद करता हूं । यह गति के साथ वास्तव में अच्छी तरह से काम करता है cpip, cpi{
फिल्माने

2
क्या आप वास्तव में की जरूरत है EasyClip है । यह सिर्फ इतना और इतना ही करेगा ...
स्कॉट वेड

जवाबों:


320

के लिए X11 आधारित सिस्टम (। यानी लिनक्स और अधिकांश अन्य यूनिक्स की तरह सिस्टम) वहाँ दो clipboards जो एक दूसरे से स्वतंत्र हैं:

  • प्राथमिक - यह कॉपी-ऑन-चयन है, और मध्य माउस बटन के साथ चिपकाया जा सकता है।
  • क्लिपबोर्ड - यह (आमतौर पर) के साथ कॉपी किया जाता है ^C, और इसके साथ चिपकाया जाता है ^V(यह एमएस विंडोज की तरह है)।

ओएस एक्स और विंडोज सिस्टम में केवल एक क्लिपबोर्ड होता है।

X11 सिस्टम के लिए ऐसे उपकरण भी हैं जो आपके लिए इन क्लिपबोर्ड को सिंक्रनाइज़ करते हैं; इसलिए यदि वे समान प्रतीत होते हैं, तो आपके पास उनमें से एक चल सकता है।

विम के पास इन क्लिपबोर्डों के अनुरूप दो विशेष रजिस्टर हैं:

  • *PRIMARY का उपयोग करता है; mnemonic: S tar S चुनाव है (कॉपी-ऑन- s चुनाव के लिए)
  • +क्लिपबोर्ड का उपयोग करता है; mnemonic: CTRL PLUS C (सामान्य कीबाइंड के लिए)

Windows और ओएस एक्स पर वहाँ कोई अंतर नहीं है +और *के बाद से इन पद्धतियों केवल एक ही क्लिपबोर्ड है, है, और दोनों रजिस्टरों (यह कोई बात नहीं है जो आप उपयोग) एक ही बात को देखें।

आप किसी भी रजिस्टर के रूप में इन रजिस्टरों का उपयोग कर सकते हैं। उदाहरण के लिए, प्राथमिक क्लिपबोर्ड का उपयोग कर *के साथ yऔर pकमांड:

  • "*yy
  • "*p

आप शायद इसे अधिक सुविधाजनक कीबाइंड के रूप में उपयोग कर सकते हैं:

noremap <Leader>y "*y
noremap <Leader>p "*p
noremap <Leader>Y "+y
noremap <Leader>P "+p

यदि आप हर समय मैन्युअल रूप से संदर्भित करने के बजाय सिस्टम के क्लिपबोर्ड के साथ "स्वचालित रूप से" इंटरफ़ेस करना चाहते हैं, तो आप clipboardचर सेट कर सकते हैं :

  • unnamedउपयोग करने के लिए इसे सेट करें *(चयन पर, प्राथमिक)
  • unnamedplusउपयोग करने के लिए इसे सेट करें +(CLIPBOARD, ^C)

अब, केवल उपयोग yyकरने से सिस्टम के क्लिपबोर्ड पर जाएगा, विम के अनाम रजिस्टर के बजाय, और pसिस्टम के क्लिपबोर्ड को पेस्ट करेगा।

आप इन रजिस्टरों को भी किसी रजिस्टर की तरह असाइन कर सकते हैं let:

  • :let @+=42
  • :let @*=42

clipboardसेटिंग (जैसे फ़िल्टर को बाहर के रूप में) कुछ और विकल्प है, लेकिन ये मूल बातें हैं। :help 'clipboard'पूरी कहानी के लिए देखें ;-)

जाँचने

यदि आप gVim का उपयोग करते हैं, तो आप उपयोग करते समय कॉपी-ऑन-सिलेक्ट व्यवहार प्राप्त कर सकते हैं :set guioptions+=a
यह X11 सिस्टम (PRIMARY की प्रतियां) पर डिफ़ॉल्ट रूप से सक्षम है, लेकिन MS Windows & OSX पर नहीं (जैसा कि किसी पाठ का चयन करने से आपका क्लिपबोर्ड ओवरराइड हो जाएगा)।

नहीं +clipboard?

विम को +clipboardकाम करने के लिए किसी भी सुविधा के झंडे की आवश्यकता होती है ; आप देख सकते हैं कि आपके विम का उपयोग करके यह है :echo has('clipboard')(यदि उत्पादन होता है विम के भीतर से 0, यह नहीं , वर्तमान अगर यह 1है, यह है), या के उत्पादन की जाँच vim --versionके लिए +clipboard

अधिकांश लिनक्स वितरण डिफ़ॉल्ट रूप से "न्यूनतम" विम निर्माण के साथ जहाज होता है, जो नहीं होता है +clipboard, लेकिन आप इसे आमतौर पर स्थापित कर सकते हैं:

  • डेबियन और उबंटू: स्थापित करें vim-gtkया vim-gnome
  • फेडोरा: ( अधिक जानकारी ) के बजाय स्थापित करें vim-X11, और चलाएं ।vimxvim
  • आर्क लिनक्स: स्थापित करें gvim(यह +clipboardसामान्य vimरूप से भी सक्षम होगा )।

तुम भी इस्तेमाल कर सकते हैं xclip, xcopyया xselक्लिपबोर्ड में टेक्स्ट कॉपी करने के लिए; समाधान के लिए निम्नलिखित प्रश्न देखें:

SSH

यदि आप SSH पर X11 अग्रेषण को सक्षम करते हैं तो आप दूरस्थ मशीनों पर क्लिपबोर्ड का भी उपयोग कर सकते हैं। यह उपरोक्त टिप के साथ विशेष रूप से उपयोगी है क्योंकि आप तब xclipअपने डेस्कटॉप के क्लिपबोर्ड तक पहुंचने के लिए उपयोग कर सकते हैं। जिस मशीन पर आप ssh-ing कर रहे हैं उस पर विम को अभी भी +clipboardफीचर की आवश्यकता होगी ।

इसके लिए ForwardX11Trustedसेटिंग की आवश्यकता होती है , और इसे केवल विश्वसनीय सर्वरों के साथ किया जाना चाहिए , क्योंकि यह सर्वर को आपके X11 सत्र पर लगभग पूर्ण नियंत्रण प्रदान करता है:

$ ssh -XY myhost

इन सेटिंग्स को निरंतर बनाने के लिए (ताकि आपको -XYहर बार जोड़ने की आवश्यकता न हो), आप अपने में कुछ ऐसा कर सकते हैं ~/.ssh/config:

# Do **NOT** set this globally; it gives the server complete control over
# your X11 session.
Host myhost
    ForwardX11 yes
    ForwardX11Trusted yes

Neovim

नेओविम ने क्लिपबोर्ड समर्थन को फिर से नया किया। में निर्मित इंटरफ़ेस निकाल और एक प्रणाली है कि इस तरह के रूप में एक बाहरी उपयोगिता फोन के साथ बदल दिया गया था xclip, xselया pbcopy/ pbpaste

इसे स्वचालित रूप से इन उपयोगिताओं को चुनना चाहिए और उनका उपयोग करना चाहिए। ओएस एक्स पर pbcopy और pbpasteडिफ़ॉल्ट रूप से उपलब्ध होना चाहिए, लिनक्स पर आप शायद स्थापित करना चाहते हैं xclip, क्योंकि यह सबसे व्यापक रूप से उपलब्ध है (वास्तव में असंगत झंडे के साथ दो संस्करण हैं । यह वास्तव में बेवकूफ है)।xsel

इसके अलावा :help clipboardNeovim में देखें।


6
ssh -Y का तात्पर्य है -X तो -X छोड़ा जा सकता है।
hildred

कुछ अंतरराष्ट्रीय कीबोर्ड के लिए, आपको "<Space>एक पाने के लिए प्रेस करने की आवश्यकता हो सकती है "। तो उन मामलों में आपको प्रेस करना होगा "<Space>+yया "<Space>*yकॉपी करना होगा।
आर्थर एफ

1
मेरे लिए यह (कुछ साल पहले) सीखने का एक बहुत ही रोचक साइड इफ़ेक्ट है, जो "कई नामित रजिस्टरों का चयन कर सकता है। "+जादू नहीं है, यह सिर्फ रजिस्टर है +। उदाहरण के लिए, आप एक ही समय में तीन बातें कॉपी और एक के बाद एक, आप कर सकते हैं द्वारा उनमें से प्रत्येक पेस्ट करना चाहते हैं "1y, "2yऔर "3yबाद में और "1p, "2pऔर "3p। यह लगभग किसी भी अन्य संपादक में वास्तव में शक्तिशाली और गैर-मौजूद है। एक और दिलचस्प उपयोग संग्रहीत मैक्रोज़ को देखने के लिए है। उदाहरण के लिए, यदि आप के साथ रिकॉर्ड करते हैं qq, लेकिन आपको पता है कि आपको इसे ठीक करने की आवश्यकता है, तो आप कर सकते हैं: एक अस्थायी रेखा में "qp, इसे ठीक करें, और "qd
शहबाज

1
बस एक नोट: ओएस एक्स में दो अलग क्लिपबोर्ड हैं। एक को Cmd-C और Cmd-V का उपयोग किया जाता है और दूसरा emacs keybindings Ctrl-K और Ctrl-Y का उपयोग करते हुए।
बॉलपॉइंटबैन

3
@ शहबाज - शायद इस तरह के उद्देश्य के लिए पत्र रजिस्टरों का उपयोग करना बेहतर है, क्योंकि जब भी पाठ हटा दिया जाता है तो गिने हुए लोग बदल जाते हैं।
evilsoup

18

अन्य उत्तर कवर करते हैं कि सिस्टम क्लिपबोर्ड में अपने बफर से टेक्स्ट को कॉपी कैसे करें। एक अन्य सामान्य ऑपरेशन एक अन्य रजिस्टर से क्लिपबोर्ड पर पाठ की प्रतिलिपि बनाना है । उदाहरण के लिए, यदि आपने पहले ही कुछ पाठ "(डिफ़ॉल्ट रजिस्टर) में जमा कर दिया है, तो आप उस रजिस्टर को क्लिपबोर्ड में लोड करना चाह सकते हैं।

आप इसके साथ कर सकते हैं :let:

  • let @+=@" - क्लिपबोर्ड में डिफ़ॉल्ट रजिस्टर को कॉपी करता है
  • let @*=@" - X11 प्राथमिक चयन में डिफ़ॉल्ट रजिस्टर की प्रतिलिपि बनाता है ("माउस क्लिपबोर्ड")
  • let @+=@a- रजिस्टर aसे क्लिपबोर्ड पर कॉपी करें
  • आदि।

ध्यान दें कि यह सामान्य रूप से रजिस्टरों के लिए काम करता है: let @a=@bप्रतियां रजिस्टर bकरने के लिए रजिस्टर करती हैं a


17

से http://vim.wikia.com/wiki/Accessing_the_system_clipboard

set clipboard=unnamedplus

यह डिफ़ॉल्ट विम रजिस्टर को रजिस्टर में बदलता है +, जो सिस्टम क्लिपबोर्ड से जुड़ा हुआ है। से :h clipboard-unnamedplus:

                                        clipboard-unnamedplus
unnamedplus     A variant of the "unnamed" flag which uses the
                clipboard register '+' (quoteplus) instead of
                register '*' for all yank, delete, change and put
                operations which would normally go to the unnamed
                register.  When "unnamed" is also included to the
                option, yank operations (but not delete, change or
                put) will additionally copy the text into register
                '*'.
                Only available with the +X11 feature.
                Availability can be checked with: 
                        if has('unnamedplus')

यह मेरे लिए क्यों नहीं काम करता है जब विम इंस्टेंस (प्रत्येक एक अलग टर्मिनेटर टर्मिनल में) के बीच यांक और पेस्ट करता है?
thinwybk

यदि आप लिनक्स पर हैं, और विम को + X11 फ़ीचर के साथ संकलित किया गया है, और आपके पास क्लिपबोर्ड = अनामांकित सेट है, तो आपको विम के एक उदाहरण में एक लाइन को सक्षम करना चाहिए और इसे विम के दूसरे उदाहरण में पेस्ट करना चाहिए। आपको इसे CTRL + V या SHIFT + INSERT के साथ किसी अन्य एप्लिकेशन में पेस्ट करने में सक्षम होना चाहिए। आप :versionविम का उपयोग करके देख सकते हैं कि क्या + X11 शामिल विशेषताओं की सूची में दिखाई देता है। आप यह भी देख सकते हैं कि क्या 'अनाम' सुविधा उपलब्ध है :if has('unnamedplus')⏎ echo 'yes'⏎ endif यदि आप लिनक्स पर नहीं हैं तो आपको अनाम के बजाय अनाम का उपयोग करना चाहिए।
क्विंसी

10

इसे बनाने वाले समर्थन पर, रजिस्टर नाम *सिस्टम क्लिपबोर्ड है। सिस्टम क्लिपबोर्ड पर विम से पाठ की प्रतिलिपि बनाने के लिए, आप दृश्य मोड का उपयोग करके पाठ का चयन कर सकते हैं, फिर "*yइसे सिस्टम क्लिपबोर्ड पर कॉपी करने के लिए दबाएं ।

इसके विपरीत, "*pसिस्टम क्लिपबोर्ड से पाठ को विम में पेस्ट करने के लिए उपयोग करें।


5

मेरा सुझाव है कि आप Gvim का उपयोग करें, और इसे अपने में जोड़ें .vimrc:

source $VIMRUNTIME/mswin.vim
behave mswin

इस के लिए समर्थन सक्षम बनाता है CtrlC, CtrlX, CtrlVविंडोज में नोटपैड की तरह।

ध्यान दें कि यह भी इस तरह के रूप में, कुछ अन्य आम विंडोज शॉर्टकट जोड़ देगा CtrlSके लिए :w, CtrlAके लिए सभी का चयन करें, आदि


0

यदि आपका विम सपोर्ट नहीं करता है +clipboardतो आप लिनक्स, मैक, विंडोज, tmux, स्क्रीन, के लिए फेकलिप प्लगइन का उपयोग कर सकते हैं ...


0

हर दूसरे जवाब में रजिस्टरों के बारे में सभी महत्वपूर्ण बातें शामिल हैं। मैं एक और चीज जोड़ना चाहूंगा जिसका मैं उपयोग करता हूं।

क्लिपबोर्ड पर नेत्रहीन चयनित पाठ को सीधे कॉपी करने के लिए विम में एक तरीका है । बस इसे अपनी vimrc फाइल में डालें :

set guioptions+=a

और, इसके साथ जब भी आप नेत्रहीन कुछ पाठ का चयन करेंगे तो वह आपके क्लिपबोर्ड पर कॉपी हो जाएगा। इस बारे में अधिक जानकारी के लिए,:help guioptions

BTW, यह केवल gVim के लिए है।


2
guioptions+=aCarpetsmoker के उत्तर में भी उल्लेख किया गया है।
मुरु

@ ममरू हाँ, क्षमा करें। मैंने वह पहले नहीं देखा था। मैंने अभी देखा।
दुर्गा स्वरूप

0

आप क्लिपबोर्ड पर कुछ विशिष्ट पैटर्न डालने के लिए एक वैश्विक कमांड का उपयोग भी कर सकते हैं। यह उन स्थितियों में उपयोगी हो सकता है जहां आपके पास फ़ाइल में बिखरी हुई जानकारी होती है और मैन्युअल रूप से नकल करने में त्रुटि और थकावट होती है।

पहले उस रजिस्टर को साफ करें जो जानकारी प्राप्त करेगा

:let @a=""

फिर पैटर्न वाली सभी लाइनों को कॉपी करें

:g/pattern/yank A

अंत में सिस्टम क्लिपबोर्ड को सूचना की प्रतिलिपि बनाना (कॉपी करना)

:let @+=@a

यदि आप क्लिपबोर्ड पर सीधे "पैटर्न" वाली प्रत्येक पंक्ति को कॉपी करने का प्रयास करते हैं तो यह काम नहीं करेगा क्योंकि क्लिपबोर्ड में नई सामग्री को जोड़ने की क्षमता नहीं है, इस प्रकार हम यहां उन सभी लाइनों को स्टोर करने के लिए एक सामान्य विम रजिस्टर का उपयोग कर रहे हैं एक बार में पैटर्न और फिर इसे क्लिपबोर्ड पर रखना।

OBS: यह उपयोग करने से पहले रजिस्टर को क्लिंज करना आवश्यक है, और रजिस्टर के UPPERCASE संस्करण का उपयोग हमें सामग्री को जोड़ने की अनुमति देता है, अन्यथा यह काम नहीं करेगा।


0

यदि आप यह पता नहीं लगा सकते हैं कि +clipboardकाम कैसे करना है , जिसे मैं किसी कारण से नहीं कर सका, तो आप ऐसा कर सकते हैं।

यह मानते हुए कि आप केवल फ़ाइल के एक भाग की प्रतिलिपि बनाना चाहते हैं, मैं विज़ुअल मोड में जाने के लिए shift+ vकेवल उन रेखाओं को हाइलाइट करता हूं जिन्हें मैं कॉपी करना चाहता हूं। तब मैं ऐसा करता हूं।

# Linux Wayland
:'<,'>w !wl-copy

# Linux Xorg
:'<,'>w !xclip -selection clipboard

व्याख्या

  • '<,'> - इसका मतलब है कि आपने किसी रेंज का चयन करने के लिए विज़ुअल मोड का उपयोग किया है (आप इसे टाइप नहीं करते हैं)
  • w !{cmd}- की सीमा को लिखें cmd, और देखें:help w_c
  • wl-copyऔर xclipऐसे प्रोग्राम हैं जिन्हें आप टेक्स्ट को पाइप कर सकते हैं और वे इसे आपके सिस्टम क्लिपबोर्ड में जोड़ देंगे

इसके अलावा, एक बार यह आपके इतिहास में होने के बाद, आपको पूरी बात फिर से टाइप करने की जरूरत नहीं है। बस दृश्य मोड के साथ चयन करें, wफिर दबाएं और कमांड को स्वत: पूर्ण होना चाहिए। इसके अलावा, इसके अलावा, आपको दृश्य मोड का उपयोग करने की आवश्यकता नहीं है। आप जो भी रेंज चाहें सेट कर सकते हैं।

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