कई बार चिपकाएँ


93

क्लिपबोर्ड की सामग्री के साथ कई लाइनों को बदलने का सबसे अच्छा तरीका क्या है?

समस्या यह है कि जब मैं एक लाइन जमा करता हूँ और इसे दूसरी पंक्ति पर चिपकाता हूँ तो "yank" को उस पंक्ति से बदल दिया जाता है जिसे मैं अभी प्रतिस्थापित करता हूँ। अब, यदि मैं दूसरी पंक्ति को उसी पंक्ति से बदलना चाहता हूं तो मुझे वापस जाना होगा और इसे फिर से यैंक करना होगा।

ऐसा करने का एक बेहतर तरीका है।

जवाबों:


106

मेरे पास मेरे .vimrc में है:

xnoremap p pgvy

(नोट: यह केवल डिफ़ॉल्ट रजिस्टर के साथ काम करेगा, लेकिन यह मैपिंग याद रखना आसान है)। अधिक विस्तृत संस्करण लिखना संभव होगा। इसके अलावा, आप अभी भी पुराने व्यवहार को प्राप्त करने के लिए P का उपयोग कर सकते हैं।


28
चतुर। पेस्ट करने के लिए 'p', 'gv' को फिर से चयन करने के लिए जिसे मूल रूप से चुना गया था। इसे फिर से कॉपी करने के लिए 'y'।
अमजीत

@ SibbsGambling, शायद विम 7 से पहले के संस्करण का उपयोग कर रहा है? फिर या तो Vim को अपग्रेड करें, या x ( vnoremap) के बजाय v का उपयोग करें । विम मदद फ़ाइल को version7.txtबताता है कि xmap और smap उस संस्करण में दिखाई दिए।
बेनोइट

1
@Benoit हम्म, मैं 7.4.52 है, लेकिन न तो xnoremapहै और न ही vnoremapकाम करता है
Sibbs जुआ

8
यह डिफ़ॉल्ट व्यवहार क्यों नहीं है ??
सेठ

27

"0आपके यान की सामग्री होनी चाहिए। यह टाइप करने के लिए थोड़ा अधिक थकाऊ है, लेकिन "0pआपको जो चाहिए वह करना चाहिए।

वैकल्पिक रूप से, पुरानी लाइनों को सामने की ओर से चुनें और प्रतिस्थापित न करें। यदि आप एक खोज के साथ उन पंक्तियों को पाते हैं, तो बस n.(प्रारंभिक के बाद p) पर हिट करें , फिर जब वे सभी चिपकाया जाए, तो आवश्यक के nddरूप में कई n.एस का पालन ​​करें ।

विम पर जाने पर मुझे जो सबसे बड़ा मानसिक स्विच बनाने की जरूरत है, वह यह पता लगाना है कि समूह संपादन क्रमिक रूप से कैसे लागू किया जाए। यानी एक पंक्ति पर संपादन का एक गुच्छा करने के बजाय और फिर उसी पंक्ति का एक गुच्छा दूसरी पंक्ति पर कर रहा हूँ, मैं पहली पंक्ति का एक गुच्छा ( .बहुत प्रभाव का उपयोग करके ) पर संपादित करूँगा , फिर एक गुच्छा पर दूसरा संपादन वैकल्पिक रूप से, मैक्रोज़ का उपयोग मदद कर सकता है क्योंकि वे शानदार हैं, लेकिन कभी-कभी "जटिल" परिवर्तनों के साथ सही ढंग से काम करने के लिए थोड़ा अधिक थकाऊ होता है।


2
ऐसी जगह की तरह लगता है जहां पुष्टिकरण :%s/.../.../gcप्रकार के कमांड के साथ
रेक्सक्स

@Milimetric +1 पता नहीं था कि आप इस तरह की पुष्टि कर सकते हैं।

1
Upvoting क्योंकि मैक्रोज़ इसे गैर-मुद्दा बना सकते हैं। बस एक बार एडिट करें, और आप कुछ ऐसा कर सकते हैं 5@m(मैक्रो नाम के लिए m)
skatenerd

महान व्याख्या के लिए धन्यवाद। अब मैं xnoremap p "0pअपने ~ / .vimrc
nexayq

13

मैं अक्सर एक और रजिस्ट्री का उपयोग करता हूं, आपको जिस लाइन को कुछ नामांकित रजिस्ट्री की आवश्यकता होती है "ayउसे कॉपी करें और फिर वहां से पेस्ट करें"ap


11

जब आप विम में एक चयन पर पेस्ट करते हैं तो यह चयन की सामग्री के साथ डिफ़ॉल्ट रजिस्टर को बदल देगा। यदि किसी चयन पर चिपकाने से क्लिपबोर्ड रजिस्टर की सामग्री का सफाया हो जाता है, तो बहुत संभव है कि आपके पास .vrc में निम्न पंक्ति हो।

set clipboard=unnamed

एक विकल्प यह है कि स्पष्ट क्लिपबोर्ड रजिस्टर को हटा दिया जाए और उसका उपयोग किया जाए "+

एक अन्य विकल्प किसी भी अन्य नामांकित रजिस्टरों (az) का उपयोग करना है। पहले पेस्ट के बाद लाइन "cको उदाहरण के लिए वापस लें और फिर "cpवहाँ से पेस्ट करने के लिए उपयोग करें।


वास्तव में डिफ़ॉल्ट (यहाँ, उबंटू पर) क्लिपबोर्ड = ऑटोसेलेक्ट था; फिर भी, अब तक के सबसे सुरुचिपूर्ण जवाब के लिए धन्यवाद।
तोबू

8

npजहां nआप लाइनों को चिपकाने के लिए कितने समय की संख्या का उपयोग करते हैं, उदाहरण के लिए 3p3 पंक्तियां चिपकाएंगे।


7
जब आप एक ही लाइन को गैर-सन्निहित लाइनों पर चिपकाना चाहते हैं तो काम नहीं करता है।
तोबू

@ टोबू लेकिन यह इस सवाल के शीर्षक का जवाब देता है 'आप कई बार कैसे पेस्ट करते हैं'
icc97

6

कॉपी / पेस्ट का उपयोग करने के बजाय, अक्सर टेक्स्ट ऑब्जेक्ट कमांड का उपयोग करना बेहतर होता है जैसे ciwकि आंतरिक शब्द को बदलना। .रिपीट कमांड का उपयोग करके आसानी से रिपीटेबल होने का फायदा इस विधि को मिलता है ।

  1. yiw याँक इनर वर्ड (कर्सर के नीचे शब्द कॉपी करें, "पहले" कहें)।
  2. ... कर्सर को दूसरे शब्द पर ले जाएं ("दूसरा" कहें)।
  3. ciw<C-r>0 "दूसरा" बदलें, इसे "पहले" (यह Ctrl-R) के साथ बदल रहा है।
  4. ... कर्सर को दूसरे शब्द पर ले जाएं ("तीसरा" कहें)।
  5. . "तीसरा" बदलें, इसे "पहले" से बदल दें।

1
ciw<C-r>0मेरे मामले में काम नहीं करता है। ciwजहां <C-r>बेकार हो जाता है, वहां मोड में बदलाव करें । क्या इसके लिए कोई आसान स्पष्टीकरण है? कर सकते हैं कि texteditor के साथ क्या करना है (मैं शुद्ध वीआईएम का उपयोग नहीं कर रहा हूं लेकिन RStudio में वीआईएम कीबोर्ड बाइंडिंग)
बुशरॉट

@Bushroot <C-r>को इन्सर्ट मोड में उपयोग करने का इरादा है, क्योंकि यह है कि आप इन्सर्ट मोड से बिना रजिस्टर से पेस्ट कैसे करते हैं - विम में, अर्थात; मैं RStudio से परिचित नहीं हूं, लेकिन मुझे लगता है कि आप सही हैं और उन्होंने इस विशेष कुंजी बंधन को लागू नहीं किया है।
कीट

@ सीन एच: हाँ। उन्होंने कुंजी बंधन को लागू नहीं किया। यह VIM और यहां तक ​​कि VIM बाइंडिंग के साथ अन्य कार्यक्रमों (जैसे Visual Studio Code) में भी ठीक काम करता है।
बुशारोट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.