यह वास्तव में काफी सरल है। चलो इसे तोड़ दो। ex
आदेश
g/^$/xyzzy
सभी खाली लाइनों की खोज करेंगे और उनमें से प्रत्येक पर xyzzy
कमांड (एक मनमाना ex
कमांड) निष्पादित करेंगे। ध्यान दें कि xyzzy
यह एक वास्तविक ex
कमांड नहीं है , यह केवल अगले पैराग्राफ के अनुसार प्लेसहोल्डर के रूप में है।
यहाँ मुश्किल सा यह है कि xyzzy
आपके मामले में "कमांड" अभी तक एक और खोज कमांड है:
,/./-j
,/./-
एक सीमा निर्दिष्ट करता है। यह फ़ॉर्म का है <start>,<end>
और, क्योंकि अल्पविराम से पहले कुछ भी नहीं है, यह वर्तमान रेखा को मानता है (जहां आपको रिक्त पंक्ति मिली थी) प्रारंभ है।
अल्पविराम के बाद है /./-
जो साधन अगले वर्ण के लिए (खोज .
किसी भी चरित्र का मतलब है) फिर वापस एक लाइन अप ( /./-
के लिए कम है /./-1
के बाद से एक है, तो कोई मूल्य नहीं दिया जाता है निहित है)। आप उस .
गैर-रिक्त रेखा पर उस पैटर्न को खोज लेंगे जिसका आप संचालन कर रहे हैं।
दूसरे शब्दों में, सीमा के अंत के बाद या वर्तमान में आप जिस पर काम कर रहे हैं, वह अंतिम रिक्त पंक्ति है।
फिर आप उस सीमा पर एक कार्य को अंजाम देते हैं।
यदि रेंज की शुरुआत और अंत बराबर थे (केवल एक खाली लाइन अनुभाग में थी), तो ज्वाइन कुछ नहीं करता है। यदि वे समान नहीं हैं, तो जुड़ने से वे सभी जुड़ जाएंगे।
इस तरह से यह एक में कई रिक्त लाइनों को जोड़ती है।
एक उदाहरण देखें (लाइन नंबर केवल स्पष्टीकरण के लिए हैं, वे वास्तविक फ़ाइल में नहीं हैं):
1 Line 1
2
3 Line 3
4 Line 4
5
6
7
8
9 Line 9
g/^$/
आदेश सभी खाली लाइनों खोजने के लिए और उन पर अपनी कार्रवाई को (इन पंक्तियों के 2, 5, 6, 7 और 8 हैं) होगा।
पंक्ति 2 के लिए, 2 ,/./-j
से 2 तक की सीमा निर्धारित करेगा (अगला .
पंक्ति 3 पर पाया जाता है, फिर 2 प्राप्त करने के लिए 1 घटाएं)। 2,2 की श्रेणी में शामिल होने से कुछ नहीं होता है।
पंक्ति 5 के लिए, ,/./-j
5 से 8 तक एक श्रेणी स्थापित करेगा (अगली .
पंक्ति 9 पर पाया गया तो 1 घटाएँ)। 5,8 श्रेणी में शामिल होने से उन सभी लाइनों को एक साथ जोड़ दिया जाएगा।
ऑपरेशन उन लाइनों पर नहीं किया जाता है जो पहले के ऑपरेशन के हिस्से के रूप में गायब हो जाते हैं। ऐसा इसलिए है क्योंकि इससे उन पंक्तियों को संसाधित करने का कोई मतलब नहीं होगा जो पहले चक्र में हटा दी गई हैं।
दूसरे शब्दों में, क्योंकि 8 के माध्यम से 6 लाइनों को हटा दिया जाता है (लाइन 5 के साथ संयुक्त), वैश्विक कमांड उसके बाद उन पर काम नहीं करता है।
यह इस तथ्य पर आधारित है कि vim
प्रलेखन दो-पास एल्गोरिथ्म बताता है, एक लाइनों को चिह्नित करने के लिए, एक ऑपरेशन को करने के लिए।