2011-09-06 17 views
41

मैं अब नियमित रूप से वीआईएम का उपयोग करता हूं लेकिन पिछली क्रिया को दोहराने के लिए मैंने कभी भी dot (।) कमांड का उपयोग नहीं किया। मैं इस बारे में पढ़ता रहता हूं कि यह कितना भयानक है लेकिन मुझे कभी भी वास्तविक दुनिया के उदाहरण नहीं दिखते हैं जो मुझे समझते हैं और जिस तरह से मैं वीआईएम में कोड करता हूं। कुछ असली दुनिया के उदाहरण क्या हैं जो दिखाते हैं कि डॉट (।) कमांड कितना भयानक है?क्या कोई मुझे बता सकता है कि वीआईएम में डॉट (।) कमांड इतना उपयोगी क्यों है?

+1

मैंने वीआई का उपयोग किया है क्योंकि पहले से मौजूद है और इसका उपयोग किया है। बहुत कम आदेश, लेकिन मैंने कभी भी किसी को भी कितना भयानक नहीं सुना है। शायद मैं सही प्रशंसक पृष्ठों को नहीं पढ़ रहा हूं। –

+2

मैंने हाल ही में 'प्रैक्टिकल विम द्वारा ड्रू नील' पढ़ना शुरू कर दिया है। पुस्तक की अवधारणा के साथ शुरू होता है। ऑपरेटर, और आपको यह समझने की कोशिश करता है कि यह क्यों सोच रहा है यह आपकी उत्पादकता के लिए फायदेमंद हो सकता है। शायद एक नज़र डालें। – eugenevd

उत्तर

31

यहां कुछ क्रियाएं हैं जो मैं डॉट कमांड के साथ करता हूं:

  • :%s/\<word\>/replacement/gc से सरल * शब्द पर है, तो cereplacement<esc> है और फिर n. दोहराएँ। यह अच्छा है अगर आपके शब्द के दो या तीन घटनाएं हैं।आप कई शब्दों है कि आप बदलना चाहते हैं, तो अगले शब्द पर जाना, मारा * और फिर n.
  • जब मैं कुछ ब्लॉक बाएँ संरेखित करना चाहते हैं: <Ctrl-V>jjj<..... या मोर्चे पर रिक्त स्थान सम्मिलित करें: <ctrl-v>jjjI<space><esc>....
  • के बाद dd या dw, डॉट आदेश

एक जादुई बात यह है कि डॉट कमांड के साथ होता है कि अगर यह एक आदेश है कि एक गिने रजिस्टर इस्तेमाल किया दोहराता है, यह अगले अंकित रजिस्टर का उपयोग करेगा (:help redo-register देखना एक और लाइन/शब्द को हटा दिया जाएगा)।

स्पष्टीकरण: आप 9 लाइनों पर dd किया था और उन्हें जिस क्रम में आपने उन्हें हटाया में बहाल करने के लिए चाहते हैं, तो कार्य करें: "1P........। ध्यान दें कि 1 से 9 के रजिस्ट्रार विम की डिलीट-रिंग हैं। "1P कर्सर के आखिरी हटाए गए पाठ से पहले डालेगा, "2P फिर पूर्व-से-हटाए गए टेक्स्ट को सम्मिलित करेगा, और इसी तरह।

+0

धन्यवाद ये दोनों बहुत अच्छे हैं। – rhinoinrepose

+1

ओह, मैं खोज और प्रतिस्थापन को तेज करने के लिए ऐसा कुछ ढूंढ रहा हूं। कई बार मुझे कुछ मिल गया है और फिर इसे और अन्य लोगों को इसे बदलना चाहते हैं। उसके लिए धन्यवाद। –

11

मैं dw.... का उपयोग अक्सर मानसिक रूप से उन्हें गिनने की आवश्यकता के बिना शब्दों की एक श्रृंखला को हटाने के लिए करता हूं। उस उदाहरण में, 5dw कम वर्ण हैं, लेकिन मुझे लगता है कि मैं डॉट कमांड का उपयोग करके लगभग 3ms तेज हूं, ताकि उन्हें delete word दोबारा गिनने के लिए दोहराया जा सके।

संपादित करें मैं अभी कुछ संपादन कर रहा था और महसूस किया कि एक और स्थिति है कि मैं डॉट कमांड का उचित मात्रा का उपयोग करता हूं। मैं कल्पना करता हूं कि इस प्रकार की चीज को विम में संभालने का एक बहुत ही आसान तरीका है, लेकिन डॉट कमांड निम्न और समान परिस्थितियों में मदद करता है। निम्नलिखित मूल रूप से "का एक उदाहरण है, मैंने कुछ बार किया था, अब मैं इसे दो बार दोहराना चाहता हूं।" मैं एक नया परीक्षण (सी में) लिख रहा था और इसे एक स्ट्रिंग निरंतर एक एसक्यूएल स्क्रिप्ट का प्रतिनिधित्व करने की आवश्यकता थी कि मैं एक और जगह से कॉपी किया। मूल मल्टीलाइन (7 लाइन) स्क्रिप्ट डबल कोट्स में संलग्न नहीं थी, इसलिए मैंने यह किया:

  • स्क्रिप्ट को सीधे कोड में डालें (फ़ाइल में 7 नई लाइनें)।
  • कर्सर को पहली नई लाइन पर रखें।
  • मैंअंतरिक्षअंतरिक्षअंतरिक्षअंतरिक्ष"esc रिक्त स्थान सम्मिलित करने के लिए और मौजूदा लाइन पर एक प्रारंभिक बोली।
  • जे छह बार उद्घाटन जोड़ने के लिए प्रत्येक अतिरिक्त लाइन के लिए उद्धरण।
  • पहली पंक्ति में पुन: स्थिति चिपका हुआ पाठ का।
  • एक\n"esc एक लाइन फ़ीड चरित्र और वर्तमान लाइन पर बंद करने उद्धरण छह बार फिर से डाल करने के लिए।
  • जे। पर बंद करने वाला उद्धरण डाल करने के लिए शेष रेखाएं
+3

आपका अंतिम उदाहरण विजुअल ब्लॉक के साथ आसान हो सकता है: स्क्रिप्ट की शुरुआत पर जाएं। ब्लॉक चयन का आह्वान करने के लिए 'Ctrl-v' या' Ctrl-q' का उपयोग करें। अंतिम पंक्ति में जाने के लिए '6j' दबाएं। लाइन के अंत में चयन करने के लिए '$' दबाएं। प्रारंभ उद्धरण डालने के लिए 'I" 'टाइप करें। अपने ब्लॉक को संशोधित करने के लिए 'gv' दबाएं। उद्धरण को बंद करने के लिए' ए \ n "' टाइप करें। – idbrii

+0

@pydave: यह अच्छा है। मैंने सोचा कि शायद एक तेज रास्ता था। मैं vim emulation के साथ SlickEdit का उपयोग कर रहा हूं, और यह चाल मेरे लिए काम नहीं करती है (लेकिन ऐसा इसलिए हो सकता है क्योंकि मैं पुराने संस्करण का उपयोग कर रहा हूं)। विम इम्यूलेशन के साथ कुछ समस्याएं हैं जिन्हें मुझे पसंद नहीं है, लेकिन SlickEdit में टैगिंग कार्यक्षमता वास्तव में अच्छी है और इसके कुछ क्विर्क इसके लायक बनाती हैं। –

+2

एक और तरीका: ':, + 6s/.*/" और \\ n "' या 'V6j: s /.*/" और \\ n "' ('&' प्रतिस्थापन भाग में मिलान किए गए पैटर्न के साथ प्रतिस्थापित किया गया है)। – Benoit

2
पिछले पोस्टर की तरह

, मैं अक्सर यह जब को हटाने का उपयोग करें:

  • iSomeText:[Esc]j.j.j.
  • :

    • dw...
    • dd...

    और जब एकाधिक पंक्तियों में एक कार्रवाई दोहरा

+0

यह क्लासिक उदाहरण की तरह है। लेकिन क्यों न सिर्फ 'yy' और 'p' कई गुना करते हैं? – rhinoinrepose

+0

ठीक है, यह उन आदेशों के लिए काम नहीं करता है जो एकाधिक कीस्ट्रोक का उपयोग करते हैं, जैसे 'iSomeText [Esc]' या 'cereplacement [Esc]' (अन्य उत्तर से)। 'पी' के मामले में, आप सही हैं, बस इसके बजाय 'p' दोहराएं। – paulmelnikow

+0

अपने आखिरी उदाहरण के लिए, कभी-कभी आप कुछ पंक्तियों के लिए कॉलम चुनने के लिए ब्लॉक चयन का उपयोग कर सकते हैं और I या A. का उपयोग 'Ctrl + vjjjISomeTextEsc'' कर सकते हैं। हालांकि डॉट का महान उपयोग। –

5
do_something(); 
do_another(); 
third_option(); 

अब कर्सर के साथ पहली पंक्ति में: A<bs><cr>{<cr><cr>}<cr>। अब मारा j.j. और

do_something() 
{ 

} 

do_another() 
{ 

} 

third_option() 
{ 

} 
3

मेरे सबसे सामान्य उदाहरण

>%... 

या सिर्फ कई चर के सामने (char *) डालने की तरह एक विशेष पाठ परिवर्तन फिर से कर पाठ का मांगपत्र स्तर बदल रहे हैं:

i(char *)<Esc>jjjwwww.jjjbb. 

(या जो कुछ भी)

3

सभी अन्य उत्तरों अच्छे उदाहरण प्रदान करते हैं, मैं बस dot जोड़ना चाहता हूं क्योंकि यह आपके आखिरी कुंजी संयोजन के लिए एक स्वचालित मैक्रो है जो केवल एक कुंजी दूर है।

जबकि मैक्रो महान हैं, वे उपयोग करने के लिए थोड़ा बोझिल हैं, जबकि dot हमेशा कम शक्तिशाली होने पर भी उपलब्ध है।

3

मेरे लिए डॉट कमांड तब तक हिट या मिस था जब तक कि मैंने किसी आवृत्ति के साथ मैक्रोज़ रिकॉर्ड करना शुरू नहीं किया। उपयोगी मैक्रोज़ रिकॉर्ड करने की चाल समस्या को दोहराने योग्य चरणों के रूप में प्रस्तुत करना है। कभी-कभी डॉट एकमात्र चीज है जो कम से कम समस्या को और अधिक आसान बनाती है।

इसके अलावा, डॉट कमांड का उपयोग करके आप उन कुछ कमांड का उपयोग करने के लिए मजबूर होंगे जिनकी आपको पहले की आवश्यकता नहीं है: cw ct; सीआई "सीए) क्योंकि वे टेक्स्ट के डिलीट/चेंज को एक" एक्शन "में गिरा देते हैं जो डॉट द्वारा दोहराने योग्य है।

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

2

जब आप यह बदलने की आवश्यकता:

instance Movable Position where 
    (x,y) --> Left = (x-1,y) 
    (x,y) --> Right = (x+1,y) 
    (x,y) --> Up = (x,y-1) 
    (x,y) --> Down = (x,y+1) 

इस में:

instance Movable Position where 
    Position(x,y) --> Left = Position(x-1,y) 
    Position(x,y) --> Right = Position(x+1,y) 
    Position(x,y) --> Up = Position(x,y-1) 
    Position(x,y) --> Down = Position(x,y+1) 

आप बाईं 'स्थिति' और सही के लिए एक बिंदु के लिए दृश्य ब्लॉक चयन का उपयोग करेंगे।

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

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