विम में, मैं कई लाइनों से कैसे कॉपी कर सकता हूं? (रेंज नहीं);


20

मेरे पास मान लो

1 - funct1
2- funct 2
3 - funct 3 
4 line 4

मैं लाइन 1 और 3 (लाइनों की एक श्रृंखला नहीं) की प्रतिलिपि कैसे बना सकता हूं और उन्हें पंक्ति में रख सकता हूं, उदाहरण के लिए लाइन 8 पर? अगर मैं इस तरह से |arg ( 1y|3y) के साथ करता हूं, तो मैं कई रजिस्टरों के लिए लाइनों को सही करूंगा? लेकिन मैं एक साथ कई रजिस्टरों से कैसे डाल सकता हूं?

जवाबों:


33

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

उदाहरण के लिए:

:1y a      # copy line 1 into register a (erases it beforehand)
:3y A      # copy line 3 into register a (after its current content)
8G  # go to line 8
"ap        # print register a

1
आप इसे सामान्य मोड में भी कर सकते हैं "ayyjj"Ayy"ap
wchargin

5
(या 1G"ayy3G"Ayy8G"apस्पष्ट रेखा संख्या के लिए)
wchargin

1
यह Gलाइन के लिए जाने के लिए नहीं है, नहीं <C-G>?
डेविड

1
यह बहुत अच्छा है। आप जितनी चाहें बफर Aको जोड़ सकते हैं और यह सब रख देगा। प्रारंभ करने के लिए, रजिस्टर में कुछ डालa
CornSmith

1
@CornSmith नाइटपिक: vim के संदर्भ में बफर एक बहुत ही विशिष्ट शब्द है। "aएक रजिस्टर है
डोरकनॉब

1

आप :copyकमांड का उपयोग कर सकते हैं , जिसे संक्षिप्त किया जा सकता है :t:

:1t8
:3t8

यदि आप लाइनों की एक श्रृंखला की नकल करना चाहते हैं (जैसे 1 से 3 तक सभी लाइनें) तो आप इसे इस तरह से कर सकते हैं:

:1,3t8

मैं संख्याओं के आधार पर लाइनों की प्रतिलिपि बनाना चाहता हूं, लेकिन रेखाओं की श्रेणी नहीं ... क्या मैं टी कमांड के साथ कुछ कर सकता हूं?
Whats Myname

0
1Gyy7Gp #use 7 if you wish to paste the line at 8
3Gyy8Gp #use 8 if you wish to paste the line at 9

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