2011-06-23 8 views
30

पर क्लिपबोर्ड को साफ़ करने से रोकें, जब मैं टर्मिनल से विम खोलता हूं, सिस्टम क्लिपबोर्ड पर कुछ टेक्स्ट कॉपी करता हूं, और विम से बाहर निकलता है, तो सिस्टम क्लिपबोर्ड साफ़ हो जाता है।विम को

क्लिपबोर्ड में कॉपी किए गए टेक्स्ट को कैसे रखें?

+0

विंडोज, लिनक्स, मैक ओएस? – TLP

+2

अक्सर पूछे जाने वाले प्रश्न पूछे जाने वाले प्रश्न पढ़ें। "आमतौर पर प्रोग्रामर द्वारा उपयोग किए जाने वाले सॉफ़्टवेयर टूल" विषय से बाहर नहीं हैं। –

+6

@ टीएलपी यह लिनक्स होना चाहिए। अगर मैं गलत नहीं कर रहा हूं, तो प्रक्रिया निम्न है: 1. आप टेक्स्ट कॉपी करते हैं। 2. विम एक्स को बताता है कि इसमें क्लिपबोर्ड के लिए डेटा है («बताता है कि इसमें डेटा है», «क्लिपबोर्ड में डेटा नहीं डालता है»)। 3. आप विम से बाहर निकलें। 4. एक्स को अब पता नहीं है कि वह क्लिपबोर्ड के लिए डेटा कहां प्राप्त कर सकता है: क्लिपबोर्ड «साफ़» है। – ZyX

उत्तर

27

superuser से Synthesizing जवाब, बस Gnome और KDE के लिए Klipper के लिए Parcellite, या glipper स्थापित अपने .vimrc

autocmd VimLeave * call system("xsel -ib", getreg('+')) 
+2

यह बिल्कुल ठीक नहीं करता है जो टीएस चाहता है: यह क्लिपबोर्ड रजिस्टर पर डिफ़ॉल्ट रजिस्टर का मूल्य बचाता है, क्लिपबोर्ड रजिस्टर नहीं। आपको 'getreg (' + ') ' – ZyX

+0

का उपयोग करना चाहिए था, आप सही हैं, मेरे पास मेरे vimrc में कहीं और सामान है जो दो को सिंक करता है ... – Matt

+2

मैट और जेड के आसपास के काम के लिए धन्यवाद YX। हालांकि इसे 'xsel' इंस्टॉल करने की आवश्यकता है। मैंने गेट्रेग ('+') का इस्तेमाल किया। – gimley

1

कृपया मुझे सही करें अगर मैं गलत हूं लेकिन विम की मेरी समझ से ...
1) विम कॉपी/कट डेटा स्टोर करने के लिए क्लिपबोर्ड के बजाय रजिस्टरों का उपयोग करता है।
2) इन रजिस्टरों जब एक स्थिति फ़ाइल में vim बाहर निकलने लेकिन चल प्रक्रिया के बाहर से पहुंचा जब तक आप स्वयं फ़ाइल को खोलने और उसकी सामग्री + registre करने के लिए
3) सहेजा जा रहा है सामान का निरीक्षण नहीं कर रहे हैं, जबकि विम
की अनुमति देता है चलाता संरक्षित कर रहे हैं आप अन्य अनुप्रयोगों में पेस्ट करने के लिए।
4) इसे बंद करने के बजाय vim (CTRL-Z) को निलंबित करके, ये पंजीयक अभी भी पहुंच योग्य हैं।

क्या यह सहायता प्रदान करता है?

+1

जब भी वीम अभी भी चल रहा है, तो मैं अन्य विंडो/टर्मिनल पर पेस्ट करने में सक्षम हूं। Ctrl + z के साथ vim को निलंबित करना कॉपी किए गए पाठ को बाहर निकलने जैसा साफ़ कर रहा है। – gimley

+0

फिर से, मेरा अनुभव बहुत सीमित है मैं आम तौर पर एक पुटी टर्मिनल के माध्यम से vi के साथ काम करता हूं। मैं जो सीखने में सक्षम था उसका सारांश यह है कि कार्यक्रम क्लिपबोर्ड पर डेटा स्टोर करने के दौरान स्थानीय रजिस्टरों का उपयोग करता है, एक बार एप्लिकेशन समाप्त होने के बाद रजिस्टरों को मंजूरी मिल जाती है और डेटा अप्राप्य बचा जाता है कैश फाइलें जो इसे करीब लिखती हैं। अगर यह निलंबित राज्य को भी प्रभावित करता है तो मैं कुछ और सुझाव नहीं दे सकता। शुभकामनाएं: डी – Grambot

5

के लिए निम्न जोड़ें।

अपने कंप्यूटर को पुनरारंभ करें या इसे मैन्युअल रूप से चलाएं।

देखें: https://wiki.ubuntu.com/ClipboardPersistence

+0

मुझे समझ में नहीं आता कि लोग इस जवाब को क्यों वोट देंगे। यह दिखाता है कि समस्या सिर्फ विम व्यवहार के तरीके के कारण नहीं है - यह कई अनुप्रयोगों को प्रभावित करती है। लिंक दिखाता है कि सभी प्रभावित अनुप्रयोगों के लिए समस्या को कैसे ठीक किया जाए। आप और अधिक क्या चाह सकते थे? –

+0

कुछ लोग, जैसे कि खुद, वास्तव में एक पूर्ण क्लिपबोर्ड प्रबंधक नहीं चाहते हैं क्योंकि हम क्लिपबोर्ड को जितनी जल्दी आवश्यकता हो उतनी दूर जाना चाहते हैं (उदा। क्योंकि इसमें संवेदनशील डेटा होता है)। सौभाग्य से, Parcellite एक डेमॉन मोड प्रदान करता है जिसमें यह "बस" क्लिपबोर्ड को सुरक्षित रखेगा। – Kevin

+0

धन्यवाद, Parcellite अच्छी तरह से काम करता है। –

2

पर Matt's answer आधार पर, निम्नलिखित xclip बजाय xsel उपयोग करता है:

autocmd VimLeave * call system('echo ' . shellescape(getreg('+')) . ' | xclip -selection clipboard') 
0

मैं इस मुद्दे को और एक संबंधित समस्या जहां ctrl-z साथ vim निलंबित भी क्लिपबोर्ड स्पष्ट होगा में फंस गयी। मैं Matt's solution विस्तार किया है ताकि दोनों ठीक करने के लिए:

set clipboard=unnamedplus 

if executable("xsel") 

    function! PreserveClipboard() 
    call system("xsel -ib", getreg('+')) 
    endfunction 

    function! PreserveClipboadAndSuspend() 
    call PreserveClipboard() 
    suspend 
    endfunction 

    autocmd VimLeave * call PreserveClipboard() 
    nnoremap <silent> <c-z> :call PreserveClipboadAndSuspend()<cr> 
    vnoremap <silent> <c-z> :<c-u>call PreserveClipboadAndSuspend()<cr> 

endif 

if executable("xsel") गार्ड वहाँ है अगर xsel स्थापित नहीं है त्रुटियों से बचने के। nnoremap मानचित्रण सामान्य मोड से निलंबित करते समय क्लिपबोर्ड को संरक्षित करता है और vnoremap मैपिंग हैंडल दृश्य या चयन मोड से निलंबित हैंडल करता है।

मैंने इस काम को विम 7.4 और 8.0 पर पुष्टि की है।