मिलान रेखा से पहले और बाद में n लाइनों की एक श्रृंखला को हटाना?


12

मेरे पास एक दोहरावदार कॉन्फ़िगरेशन फ़ाइल है और मैं एक रेगेक्स से मेल खाना चाहता हूं और एक मैच से पहले और बाद में कई लाइनों को हटा सकता हूं। मैं एक कमांड में मैच हटाना भी चाहूंगा।

मैं उपयोग कर सकता हूं...

:g/match/-1d

... एक मैच से पहले एक से अधिक लाइन हटाने के लिए कई बार ...

... और इसे कुछ कॉल के साथ संयोजित करें ...

:g/match/+1d

... मैच के बाद एक से अधिक लाइन हटाने के लिए ...

लेकिन क्या किसी भी तरह की लाइनों को हटाने से पहले, बाद में और एक आदेश के साथ मैच शामिल है?

जवाबों:


21

तुम लगभग वहां थे; आप लाइनों की एक श्रृंखला भी निर्दिष्ट कर सकते हैं, जो [line1],[line2][command]केवल के बजाय [line][command](जैसे आप अभी उपयोग कर रहे हैं) के रूप में है।

आप .वर्तमान लाइन को संदर्भित करने के लिए उपयोग कर सकते हैं ।

  • वर्तमान और अगली पंक्ति के लिए: :g/match/.,+1d
  • वर्तमान और पिछली पंक्ति के लिए: :g/match/-1,.d
  • पिछली, वर्तमान और अगली पंक्ति के लिए: :g/match/-1,+1d

:help [range]अधिक जानकारी के लिए देखें , और इस उत्तर में कुछ और उदाहरण हैं


क्या वाक्य रचना सिंटैक्स में समान है?
leeand00

3
@ leeand00 नहीं। यह सब :gएक पैटर्न से मेल खाती लाइनों पर एक पूर्व कमांड चलाया जाता है। इसलिए टाइपिंग :g/match/.,+1dठीक वैसी ही होगी जैसी सभी लाइनों के साथ होती है match, और टाइपिंग:.,+1d
मार्टिन टूरनोइज

यह सबसे अच्छी बात है जो मैंने थोड़ी देर में विम पर सीखी है। साझा करने के लिए धन्यवाद!
LPS
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.