2012-01-24 13 views
38

में एकाधिक लाइनों को काटें और पेस्ट करें मै मैक 10.7.2 पर vim 7.3 चला रहा हूं और मुझे कई लाइनों को काटने और चिपकाने में कुछ परेशानी हो रही है।विम

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

मुझे पता है कि मैं "2dd" टाइप करके और फिर "पी" टाइप करके जो चाहता हूं उसे पूरा कर सकता हूं - लेकिन मैं समय से पहले लाइनों की संख्या को गिनने के बिना "डीडी" लाइनों में सक्षम होना चाहता हूं।

कोई विचार?

+2

नहीं लाइनों आगे गिनती लाइन नंबर अपने कर्सर के सापेक्ष प्रदर्शित करने के लिए "relativenumbers" का उपयोग करें। और 7.4 "सेटिंग" और "relativenumbers" दोनों की सेटिंग से लाइन नंबर बनाता है जहां आपका कर्सर पूर्ण होता है और अन्य रिश्तेदार दोनों दुनिया के सर्वश्रेष्ठ होते हैं। तो ऐसा करना आसान है जैसे @ गियोवानी ने डी 2 डी (दो लाइनों के लिए) का सुझाव दिया। –

+1

यह बहुत ही बढ़िया है, लेकिन किसी को भी यह कोशिश करने के लिए यह वास्तव में "संख्या" और "relativenumber" है, न कि "संख्याएं" और "relativenumbers" :) – user3640967

उत्तर

75

क्या आपने visual mode का उपयोग करने पर विचार किया है?

तुम बस जा सकते हैं:

  • प्रेस V
  • सब कुछ आप जहां आप चिपकाना
  • प्रेस p
  • चाहते हैं कि गिनती
  • प्रेस d
  • जाओ बिना कटौती करना चाहते हैं

यह dd विधि के रूप में लगभग आधे से अधिक कीस्ट्रोक उत्पन्न करना चाहिए क्योंकि आप दो की बजाय प्रति पंक्ति एक कुंजी दबाते हैं। बोनस पॉइंट्स यदि आप एक समय में एकाधिक लाइनों का चयन करने के लिए 5j (या समान) का उपयोग करते हैं।

+9

पूर्ण लाइनों के लिए, 'वी' (शिफ्ट + वी) का उपयोग करना आसान है। –

+0

अच्छा एक @GregHewgill, आपके सुझाव के साथ संपादित। –

+1

मैं यह कहने वाला था कि मैं ऐसा नहीं करना चाहता था क्योंकि मुझे अपने पुराने काम-प्रवाह को "पसंद आया" था। लेकिन, मैंने अभी कोशिश की और यह बेहतर तरीका है। धन्यवाद! – spinlock

5

यह सुनिश्चित नहीं है कि यह आपके द्वारा कोशिश की जा रही चीज़ों के करीब है, लेकिन एक चीज जो आप कर सकते हैं वह एक विशिष्ट रजिस्टर का उपयोग करें, और अपने रजिस्टर नाम को कैपिटल करें। यही कारण है कि vim बताता बजाय रजिस्टर को संलग्न इसे बदलना, इसलिए यदि आप लाइनों के लिए:

one 
two 
three 

आप

"qdd 
"Qdd 
"Qdd 

और बाद में प्रवेश कर सकते हैं तो अगर आप में प्रवेश

"qp 

यह मूल लाइनों को वापस पेस्ट करेगा

+0

प्रश्न से, ऐसा लगता है कि इसे 'डी' में मैप किया गया था। – romainl

1

मैं @ बेन एस से सहमत हूं कि यह एनो का पसंदीदा तरीका है इसे मिप्लिक करें लेकिन यदि आप अपने पुराने व्यवहार को दोहराने की तलाश में हैं तो आप एक निर्दिष्ट रजिस्टर में शामिल होने के लिए dd को रीमेप कर सकते हैं और फिर उस रजिस्टर से पेस्ट करने के लिए p मानचित्र करें और इसे साफ़ करें।
यह p को डीडी का उपयोग करके हटाए गए चीजों के साथ काम करने का नुकसान होगा (पैराग्राफ के अंत तक हटाने के लिए d} का उपयोग करके पाठ को सही रजिस्टर में बाद में चिपकाया नहीं जाएगा)।

अपने vimrc

noremap dd "Ddd    "Appends the contents of the current line into register d 
noremap p "dp:let @d=""<CR> "Pastes from register d and then clears it out 

पर निम्नलिखित को जोड़ यदि आप नहीं करते चिपकाने रजिस्टर

noremap p "dp    "Paste from register d 

की सामग्री को साफ करना चाहते हैं लेकिन इस का कारण होगा कि कभी भी साफ किए बिना विकसित करने के लिए रजिस्टर यह

2

रेखा संख्याओं को देखने और पेस्ट करने के लिए (पंक्तियों को देखने के लिए :set number करें), लाइन x से y करने के लिए:

:x,yd 

या यदि आपका कर्सर पर लाइन एक्स पहले से ही है,

:,yd 

कर फिर जहां पेस्ट और प्रेस करने p

13

आप टाइप कर सकते हैं चाहते हैं पर जाएँ:

d<n>d 

जहां <n> उन पंक्तियों की संख्या है जिन्हें आप काटना चाहते हैं, और फिर आप उन्हें पेस्ट कर सकते हैं:

p 

उदाहरण के लिए, कट और 3 लाइनों चिपकाने के लिए:

d3d 
p 
+0

महान उत्तर धन्यवाद – kapil