2010-10-21 16 views
7

कभी-कभी मुझे फ़ाइल में कुछ समान रेखाएं डालने की आवश्यकता होती है जो केवल अनुक्रम संख्या में भिन्न होती हैं। उदाहरण के लिए,विम में समान लाइनों को डालने के दौरान मैं कीस्ट्रोक को कम कैसे कर सकता हूं?

print "func 1"; 
print "func 2"; 
print "func 3"; 
print "func 4"; 
print "func 5"; 

vim का उपयोग करना, मैं प्रतिलिपि [yypppp] का उपयोग कर पहली पंक्ति चिपकाकर और फिर पिछले चार लाइनों को बदलने के अंत। यदि आपके पास सम्मिलित करने के लिए और अधिक पंक्तियां हैं तो यह वास्तव में धीमी है।

क्या यह विम में ऐसा करने का एक तेज़ तरीका है?


इस का एक उदाहरण है:

प्रारंभिक राज्य

boot(); 
format(); 
parse(); 
compare(); 
results(); 
clean(); 

अंतिम राज्य

print "func 1"; 
format(); 
print "func 2"; 
parse(); 
print "func 3"; 
compare(); 
print "func 4"; 
results(); 
print "func 5"; 
clean(); 

उत्तर

12

एक मैक्रो रिकॉर्ड करें। यहां आपके विशेष उदाहरण के लिए वर्कफ़्लो है:

पहली पंक्ति कॉपी-पेस्ट करें। फिर,

qa  : Start recording macro to register a 
yy  : Yank current line 
p  : Paste current line in line below 
/\d  : Search for start of number (you can skip this command, the next command automagically moves the cursor to the number) 
C-A  : Control-A increments the number 
q  : Stop recording macro 
[email protected]  : Replay macro 3 times 

आप 3 किसी भी संख्या के साथ बढ़ती संख्या के साथ नए print लाइनों पैदा रखने के लिए बदल सकते हैं।

अपने दूसरे उदाहरण के लिए, तुम सिर्फ

j  : Moves one line down 

yy आदेश के बाद जोड़ सकते हैं, आदेश और print की की तर्ज बारी मिलता है।

+3

आपको वास्तव में '/ [0-9] \ + 'करने की आवश्यकता नहीं है, VIM स्वचालित रूप से कर्सर को – Hasturkun

+0

@Hasturkun पर ले जाता है: वाह, यह बहुत अच्छा है। – Chetan

+0

आप '/ [0-9] \ + 'को बहुत बेहतर'/\ d' के साथ प्रतिस्थापित कर सकते हैं (आपको पूरे नंबर को एक मैच में प्राप्त करने की आवश्यकता नहीं है, आपको केवल कर्सर को किसी नंबर पर रखने की आवश्यकता है, इसलिए \ + 'यहां एक ओवरकिल है।' \ d' '[0-9]' के लिए एक शॉर्टकट है। यह तेज़ है, लेकिन इससे कोई फर्क नहीं पड़ता। यह कुंजी की संख्या को भी कम करता है जिसे दबाया जाना चाहिए।)। – ZyX

1

आपके पास प्लगइन हैं जो इसे करते हैं। उदाहरण के लिए, । संख्याओं के अपने कॉलम को दृश्यमान रूप से चुनें, और :I चलाएं।

ऐसा करने का एक और तरीका मैक्रो रिकॉर्ड करना है। चलाने qx मैक्रो रिकॉर्डिंग एक्स, yiw रजिस्टर करने के लिए शब्द, एक पंक्ति नीचे जाने के लिए, यह पेस्ट करने के लिए कर्सर के तहत झटका jviwp शुरू करने के लिए, CTRLएक रिकॉर्डिंग बंद करने नया नंबर, q बढ़ाने के लिए, और फिर रजिस्टर x की सामग्री को फिर से चलाने के लिए।

0

इस विशेष मामले के लिए, आप एक मैक्रो का उपयोग कर सकते हैं। this post में क्रम संख्या कैसे करें, इसका एक अच्छा लेखन है।

आपको पहले पंक्ति को लिखने के लिए पोस्ट में उदाहरण बदलने की आवश्यकता है और उसके बाद एक मैक्रो रिकॉर्ड करें जो लाइन की प्रतिलिपि बनाता है और काउंटर अपडेट करता है।

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

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