2008-12-10 8 views
86

मुझे पता है कि विम में मैं अक्सर इसके सामने एक संख्या जोड़कर एक आदेश दोहरा सकता हूं।मैं विम में एकाधिक लाइनों पर एक संपादन दोहरा सकता हूं?

5dd 

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

:10,20s:hello:goodbye:gc 

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

उत्तर

83

:10,20s/^/,/

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

q a i , ESC j h q

के साथ प्रयोग:

@ a

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

+0

का उपयोग करके दृश्य ब्लॉक की प्रत्येक पंक्ति पर अपना अंतिम आदेश दोहराने की अनुमति देता है। क्या होगा यदि मैं एक शिफ्ट के बराबर चाहता था? यही है, प्रारंभिक सफेद जगह पर छोड़ना? – saffsd

+1

: एस/^ \ (\ s * \)/\ 1,/ – Svante

+1

स्पष्टीकरण: '^ \ (\ s * \)' प्रारंभिक व्हाइटस्पेस को कैप्चर करता है और इसे एक रजिस्टर में सहेजता है, जिसे आप '\ 1' के साथ पढ़ सकते हैं । – Svante

10

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

q a I , ESC j q 

दोहराने की है कि 5 बार, आप

5 @ a 
1
मैक्रो से

अलावा, के रूप में पहले से ही उत्तर में प्रवेश, विशिष्ट के लिए लाइनों की एक श्रृंखला में एक अल्पविराम डालने के मामले (कहते हैं कि लाइन 10 से 20 करने के लिए), आप की तरह कुछ कर सकता:

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

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

90

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

तो पाठ के लिए

: - अपने कर्सर के साथ 1 से अधिक तो वी, जे दो बार मारा दो कॉलम नीचे जाने के लिए, शिफ्ट -

abc123abc 
def456def 
ghi789ghi 

अगर आप Ctrl मारा मैं,ईएससी, आपका टेक्स्ट इस तरह दिखेगा:

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

(बहु-रेखा डालने में थोड़ा अंतराल होता है, और ईएससी) के बाद तक प्रस्तुत नहीं किया जाएगा।

+3

अच्छा। Ctrl-V का अर्थ है अपरकेस, वैसे, आप Ctrl-Shift-v – Svante

+8

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

+2

इस विधि को क्यों काम नहीं कर रहा था, इसकी खोज करने के बाद यह है क्योंकि यह i की बजाय पूंजी I (shift-i) का उपयोग करता है (यह भी, यह केवल ctrl-v था, क्योंकि ctrl-shift-v मुझे अंत में ले जाया गया था) – Willyfrog

44

है यही कारण है कि:

 
:10,20 normal I, 
2

मैं block visual mode का उपयोग करें: आदर्श (अल) आदेश के लिए है। यह आपको कई लाइनों (उर्फ 'लंबवत संपादन') में आवेषण/संपादन करने की अनुमति देता है।

+0

आपका लिंक टूटा हुआ है –

17

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

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

क्यूए मैं, ESC JQ

2) है कि आप

3 करने के लिए मैक्रो लागू करने के लिए) चाहते हैं कि 'मानक' समारोह का उपयोग लाइनों के ब्लॉक का चयन निष्पादित मैक्रो 'एक' लाइनों के इस खंड, यानी, अधिक

:'<,'>[email protected] 
36

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

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

बहुत अच्छा धन्यवाद! – cmcginty

+1

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

संबंधित मुद्दे

 संबंधित मुद्दे