मैं विम में कई लाइनों पर एक संपादन कैसे दोहराऊं?


122

मुझे पता है कि विम में मैं अक्सर इसके सामने एक संख्या जोड़कर एक कमांड दोहरा सकता हूं। उदाहरण के लिए, कोई व्यक्ति 5 लाइनों को हटा सकता है:

5dd

उदाहरण के लिए, कमांड को लागू करने के लिए कई बार लाइनों को निर्दिष्ट करना भी संभव है

:10,20s:hello:goodbye:gc

मैं 'वर्टिकल एडिट' कैसे कर सकता हूं? मैं उदाहरण के लिए, किसी विशेष प्रतीक को सम्मिलित करना, एक अल्पविराम कहना, बीगिंगिंग पर (व्हाट्सएप्प को छोड़ना, अर्थात यदि आप किसी पंक्ति में शिफ्ट- I के बाद कमांड लाइन में अल्पविराम टाइप करते हैं तो आपको क्या मिलेगा) रेंज। इसे कैसे प्राप्त किया जा सकता है (डाउन-पीरियड-डाउन-डाउन-पीरियड-डाउन-पीरियड का सहारा लिए बिना)?

जवाबों:


107

:10,20s/^/,/

या मैक्रो का उपयोग करें, के साथ रिकॉर्ड करें:

q a i , ESC j h q

साथ उपयोग:

@ a

स्पष्टीकरण: q aपंजीकरण करने के लिए एक मैक्रो रिकॉर्ड करना शुरू करता है a, qरिकॉर्डिंग समाप्त करता है। वहाँ रजिस्टरों हैं aकरने के लिए zइस के लिए उपलब्ध।


धन्यवाद। अगर मैं शिफ्ट-आई के बराबर चाहता हूं तो क्या होगा? यही है, शुरुआती व्हाट्सएप पर लंघन?
दोपहर

2
स्पष्टीकरण: ^\(\s*\)प्रारंभिक व्हाट्सएप को कैप्चर करता है और इसे एक रजिस्टर में सहेजता है, जिसे आप तब पढ़ सकते हैं \1
श्वेन्ते 12

136

Ctrl- vविजुअल मोड ब्लॉकवाइज़ में प्रवेश करता है। फिर आप ( hjklसामान्य के रूप में) को स्थानांतरित कर सकते हैं , और यदि आप कई लाइनों पर कुछ डालना चाहते हैं, तो उपयोग करें Shift- i

तो पाठ के लिए:

abc123abc
def456def
ghi789ghi

यदि आप हिट करते हैं Ctrl- v1 से अधिक अपने कर्सर के साथ, jदो कॉलम नीचे जाने के लिए दो बार हिट करें , फिर Shift- i,ESC, आपका पाठ इस तरह दिखेगा:

abc,123abc
def,456def
ghi,789ghi

(मल्टी-लाइन इंसर्ट में थोड़ा अंतराल है, और जब तक आप हिट नहीं करते तब तक रेंडर नहीं होगा ESC)।


3
अच्छा लगा। Ctrl-V का मतलब अपरकेस है, वैसे आप Ctrl-Shift-v
Svante

8
वास्तव में, यह या तो CTRL-v या CTRL-V है। विम CTRL- कोड के लिए केस-असंवेदनशील है (देखें: CTRL- {char} की मदद करें)।
२१:

2
इस पद्धति के काम न करने की थोड़ी खोज करने के बाद, क्योंकि मैं इसके बजाय एक कैपिटल I (शिफ्ट-आई) का उपयोग करता हूं (साथ ही, यह केवल ctrl-v था, क्योंकि ctrl-shift-v ने मुझे अंत तक स्थानांतरित कर दिया)
विलीफ्रॉग

4
मैं उत्सुक हूँ। वे iशिफ्ट कुंजी के बिना उपयोग क्यों नहीं करते हैं ?
ऑफ99555

1
मैं बिना किसी बदलाव के वर्तमान स्थिति में सम्मिलित हूं। Shift + i लाइन की शुरुआत
केविन पी


44

यदि आप पहले से ही 'का उपयोग कर रहे हैं।' आपकी अंतिम कमांड को बहुत बार दोहराने के लिए, तब मैंने इसे अब तक का सबसे सुविधाजनक समाधान पाया । यह आपको एक दृश्य ब्लॉक के प्रत्येक लाइन पर अपने अंतिम कमांड को दोहराने की अनुमति देता है

" allow the . to execute once for each line of a visual selection
vnoremap . :normal .<CR>

1
यह .दृश्य मोड में संचालित लाइन वार के रूप में सहायक है, लेकिन सीमित भी है। मुझे लगता है कि इस मामले में दृश्य मोड कभी-कभी लाइन रेंज का चयन करने के लिए सुविधाजनक हो सकता है। लेकिन कमांड और मैक्रोज़ इस मामले में अधिक लचीले और शक्तिशाली हैं।
बोह्र

23

मेरा मानना ​​है कि ऐसा करने का सबसे आसान तरीका है

1) एक लाइन के लिए एक मैक्रो रिकॉर्ड करें, इसे 'ए' कहें; इस मामले में एक प्रकार

क्यूए I, ईएससी जिक

2) उन लाइनों के ब्लॉक का चयन करें जिन्हें आप मैक्रो को लागू करना चाहते हैं

3) लाइनों के इस ब्लॉक पर मैक्रो को निष्पादित करने के लिए 'आदर्श' फ़ंक्शन का उपयोग करें, अर्थात,

:'<,'>norm@a

17

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

q a I , ESC j q

उस 5 बार दोहराने के लिए, आप दर्ज करें

5 @ a


2

.ऑपरेटर में पहले से सहेजे गए आपके संपादन के साथ , निम्न कार्य करें:

  1. उस पाठ का चयन करें जिसे आप दृश्य मोड का उपयोग करके ऑपरेटर को लागू करना चाहते हैं
  2. फिर कमांड चलाएं :norm .

1

मैक्रोज़ के अलावा, जैसा कि पहले से ही उत्तर दिया गया है, लाइनों की एक श्रेणी में अल्पविराम डालने के विशिष्ट मामले के लिए (पंक्ति 10 से 20 तक), आप कुछ ऐसा कर सकते हैं:

:10,20s/\(.*\)/,\1

यही है, आप \ "(और \) के साथ एक गिने हुए समूह मिलान बना सकते हैं, और प्रतिस्थापन स्ट्रिंग में" 1 का उपयोग करके "मैच की सामग्री के साथ बदलें" कह सकते हैं।

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