क्या मैं विम में चिपकाने में तेजी ला सकता हूं?


12

मैंने एक वेब पेज से HTML के एक हिस्से की नकल की और इसे एक फ़ाइल में सहेजना चाहता था। उसके लिए मैंने vim एक टर्मिनल विंडो में एक नया सत्र शुरू किया, कमांडलाइन पर निर्दिष्ट (नया) फ़ाइलनाम के साथ, iमोड सम्मिलित करने के लिए मारा और फिर CtrlShift+ Vऔर इंतजार करते हुए [-- INSERT --]नीचे दिखाया गया और इंतजार किया ...

जैसा कि vimकई सेकंड के बाद गैर-उत्तरदायी था, मैंने एप्लिकेशन से 'टेक्स्ट एडिटर' को खोला → एक्सेसरीज़ मेनू ने पाठ को चिपकाया (जो एक सेकंड के एक अंश के भीतर दिखा, इसे नए नाम के तहत सहेजा, बंद किया, और विम सत्र को मार दिया। अभी भी नहीं किया गया था, 1.5 मिनट बाद। 3200 लाइनों में पाठ की मात्रा 186K थी, जो मैं नहीं कहूंगा, न ही बहुत लंबी लाइनों के साथ।

क्या इस तरह के सम्मिलन को गति देने का एक तरीका है vimऔर / या क्या इसमें स्पष्टीकरण है कि यह उपयोग करने की तुलना में इतना धीमा क्यों है, अन्यथा भयानक और माउस उन्मुख, पाठ संपादक?

(% CPU top5% से ऊपर नहीं आता है, हालाँकि मेरे पास सिस्टम में कुछ प्रोसेसर मुफ्त हैं, इसलिए यह कुछ I / O बाध्य समस्या हो सकती है, जो एक फ़ाइल से एक ही पाठ को पढ़ते समय मौजूद नहीं है)

संस्करण जानकारी:
Ubuntu 12.04
विम: 7.3, उबंटू 12.04
bash द्वारा आपूर्ति की गई पैच के साथ : 4.2.25
सूक्ति-टर्मिनल: 3.4.1.1


1
मुझे लगता है कि यह धीमा है b / c यह इनपुट पार्स करने के लिए है और इसे प्रारूपित करने की कोशिश कर रहा हूं आदि। मुझे ऐसा करने के विकल्प पर यकीन नहीं है, लेकिन मान लेंगे कि आप उस सुविधा को अस्थायी रूप से अक्षम कर सकते हैं / vimचिपकाने, और फिर इसे फिर से सक्षम करें। यह :set pasteदेखने के लिए कि क्या यह चीजों में सुधार करता है , सुविधा का उपयोग करके देखें। :help pasteयह देखें कि यह वर्णन करता है कि कैसे vimकोई भेद नहीं करता है b / w टाइपिंग और पेस्टिंग।
स्लम

मैं उम्मीद होती है viजब में पढ़ने (वैसे @ l0b0 सुझाव बचाने के बाद), और साथ फ़ाइल को पार्स करने की कोशिश करने के लिए। लेकिन वह तेजी से काम करता है।
एंथन

यह सच है, लेकिन मैं कल्पना कर रहा हूं कि यह सब कुछ पहले से ही पार्स हो गया है। नया चरित्र + जैसा कि आप इसे पेस्ट कर रहे हैं। ऐसा लगता है कि जब आप किसी फ़ाइल को संपादित करते हैं, तो एक हद तक।
स्लम

:set pasteवास्तव में एक फर्क प्रतीत नहीं होता है (मैं एक स्टॉपवॉच, बस दीवार घड़ी का उपयोग नहीं कर रहा हूँ)।
एंथन

ठीक है, सिर्फ एक विचार ... था
SLM

जवाबों:


14

जल्दी से फ़ाइल करने के लिए बहुत सारे क्लिपबोर्ड पाठ को सहेजने के लिए, आप cat > file.txtसामग्री को चला सकते हैं, फिर दबा सकते हैं Ctrl- d

यदि आपके पास xsel स्थापित है, तो आप :r !xselविम में "प्राथमिक" (उर्फ "माउस") चयन :r !xsel -bकरने के लिए , या "क्लिपबोर्ड" ( Ctrl- c) बफर डालने के लिए कर सकते हैं । आप चयन को सीधे फ़ाइल के साथ xsel >file.txtया में भी सहेज सकते हैं xsel -b >file.txt। यह अलग चिपकाने + EOF क्रियाओं की आवश्यकता को हटा देता है, और टर्मिनल में पूरी कॉपी बफर को प्रिंट करने से बचता है।

यदि आपके पास कोई xsel नहीं है, लेकिन xclip, संबंधित कमांड xclip -outप्राथमिक चयन के लिए हैं, या xclip -out -selection clipboardक्लिपबोर्ड बफर के लिए हैं।


1
धन्यवाद, कि कम से कम माउस को वापस करने के बिना काम करता है, और फ़ाइल को विम में सम्मिलित करना (जैसे जब मैं खाली फ़ाइल से शुरू नहीं करता हूं) बहुत जल्दी है।
एंथन जूल

मुझे समझ में नहीं आता कि इसे ctrl + shift + v से कैसे जोड़ा जा सकता है, इस सब में कोई मतलब नहीं है।
mchid

2

यह एक बफर फ्लश-टू-डिस्क समस्या है। विम आपके काम को सुरक्षित रखने की कोशिश करता है और यह नहीं मानता है कि आप प्रति सेकंड कई हजार अक्षर टाइप कर सकते हैं। :help swap-fileबफ़रिंग पर कुछ विवरणों के लिए पढ़ें । आपकी समस्या का हल यह है:

याम की स्वफ़िल को बंद करें:

vim -n <your file>

या पेस्ट से पहले विम के भीतर से:

:set noswapfile

:help swapfileअधिक जानकारी के लिए देखें।

एक अन्य विकल्प बस स्वैप फ़ाइल के डिस्क को सिंकिंग को बंद करना है :set swapsync=लेकिन यह विकल्प पूर्ववत करने के लिए अधिक कीस्ट्रोक्स लेता है और मैं आलसी हूं। :)

सामान्य ऑपरेशन के लिए स्वैप बंद करना सुरक्षित नहीं है! पेस्ट के तुरंत बाद, या तो उपयोग करें :set swapfileया :set swapsync=fsyncसामान्य व्यवहार पर वापस लौटने के लिए (हालांकि तकनीकी रूप से, सामान्य व्यवहार सिंक हो सकता है और fsync नहीं है , :set swapsync?पहले से जांच लें कि क्या आप इस मार्ग पर जाना चाहते हैं)।


1
यह मेरे लिए सब कुछ तेज़ नहीं था ...
elig

1

यदि आपके पास xterm_clipboardसुविधा है, तो आप रजिस्टर *और +रजिस्टर का उपयोग कर सकते हैं । ये X11 प्राथमिक चयन बफर, और क्लिपबोर्ड (क्रमशः) के साथ इंटरफ़ेस को पंजीकृत करता है।

इस प्रकार यदि आपने CTRL+ के माध्यम से कुछ कॉपी किया है c, तो आप इसे vim के साथ पेस्ट कर सकते हैं "+p

यदि आपने इसे कॉपी किए बिना ही हाइलाइट किया है, तो आप इसे पेस्ट कर सकते हैं "*p
आप *बफर को डिफ़ॉल्ट बफर भी कर सकते हैं :set clipboard=unnamed। फिर कोई यैंक ( y), पेस्ट ( p), आदि, जो निर्दिष्ट नहीं करता है कि एक रजिस्टर रजिस्टर का उपयोग करेगा *। Vim 7.3.74 भी जोड़ा गया है clipboard=unnamedplus, जो +डिफ़ॉल्ट रूप से रजिस्टर का उपयोग करेगा ।

आप उदाहरण के लिए, प्राथमिक चयन और क्लिपबोर्ड बफ़र में चीजों को कॉपी कर सकते हैं "+yy

 

ध्यान दें, जैसा कि उल्लेख किया गया है, इन क्षमताओं को सभी की आवश्यकता है xterm_clipboard। आप देख सकते हैं कि क्या आपके पास यह विशेषता है :versionविम के अंदर, या vim --versionशेल से, और देखें +xterm_clipboard। यदि यह कहता है -xterm_clipboard, तो आपके पास नहीं है और विम को फिर से जोड़ना होगा।


मेरे पास वह सुविधा नहीं है। मदद recompiling भी vim xterm के तहत नहीं चल रहा है? (मैं सूक्ति-टर्मिनल का उपयोग कर रहा हूं)।
एंथन

@Anthon यदि आप GUI VIM का उपयोग कर रहे हैं, तो मेरा मानना ​​है कि रजिस्टरों को भी सक्षम किया गया है। xterm_clipboardकेवल अगर टर्मिनल से विम चल रहा है।
पैट्रिक

यह केवल पाठ है, कोई GUI VIM नहीं है, लेकिन इससे नहीं चल रहा है xterm
एंथन

ओह, माफ करना, मैंने गलत किया। हाँ xterm_clipboardकिसी भी टर्मिनल एमुलेटर पर लागू होता है, न कि केवल एक्सटर्म पर। मैं खुद urxvt का उपयोग करता हूं।
पैट्रिक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.