जवाबों:
मै इस्तेमाल करूंगा \zs
:%s/.*\zspattern/replacement/
थोड़ा सा स्पष्टीकरण:
.
किसी भी एक चरित्र का प्रतिनिधित्व करता है*
लालची मिलान (अधिक से अधिक) का प्रतिनिधित्व करता हैविम में आप शून्य चौड़ाई एंकर उपयोग कर सकते हैं \zs
और \ze
आरंभ और खोज पैटर्न है, जो आप का मिलान करना चाहते के अंत परिभाषित करने के लिए। आपके पैटर्न के पहले \zs
और बाद \ze
में कुछ भी प्रतिस्थापन से अप्रभावित रहेगा।
इसे समझना आसान बनाने के लिए, मैं विकिया के खोज और प्रतिस्थापन से इस उदाहरण का उपयोग करना चाहूंगा :
एक पैटर्न के प्रारंभ और अंत को सेट करके
\zs
और टाइप करके सहेजें\ze
। उदाहरण के लिए, इसके बजाय::s/Copyright 2007 All Rights Reserved/Copyright 2008 All Rights Reserved/
उपयोग:
:s/Copyright \zs2007\ze All Rights Reserved/2008/
अधिक जानकारी के लिए, देखें
.*
है लालची ।
आप सभी को समूहीकृत करके अंतिम मैच की खोज कर सकते हैं \(.*\)
, लेकिन अंतिम ऑवररेंस pattern
। फिर पकड़े गए समूह के साथ बाहर निकलना \1
, और जोड़ना replacement
।
:%s/\(.*\)pattern/\1replacement/
\zs
समाधान से हीन है , जिसमें आपका \1
दृष्टिकोण कार्यात्मक रूप से समतुल्य है, लेकिन अधिक क्रिया है। (दूसरी ओर, कुछ के लिए याद रखना आसान हो सकता है, खासकर यदि वे अन्य रेगेक्स फ्लेवर के लिए उपयोग किए जाते हैं))
पूर्णता के लिए मुझे लगा कि मैं एक विकल्प पोस्ट करूंगा। विम में बहु-आइटम हैं, जिनमें से कुछ अधिक मानक नियमित अभिव्यक्ति लुकअप अभिकथन (नकारात्मक / सकारात्मक लुकहैड / लुकबाइंड) के समान हैं। /programming/2973436/regex-lookahead-lookbehind-and-atomic-groups
इस मामले में हम एक नकारात्मक लुकहेड चाहते हैं \@!
, जिसका अर्थ है कि हम यह दावा करना चाहते हैं कि आइटम से पहले होने वाला परमाणु पैटर्न के बाद नहीं होता है । इस मामले में परमाणु वह पैटर्न है जो किसी और चीज से पहले है:
:%s/pattern\(.*pattern\)\@!/replacement/
कोष्ठकों के अंदर का हिस्सा शून्य-चौड़ाई वाला है और मैच में शामिल नहीं है इसलिए प्रतिस्थापन द्वारा प्रतिस्थापित नहीं किया जाता है।
:h \@!
अधिक जानकारी के लिए या :h pattern-multi-items
अन्य लुकअराऊन भिन्नताओं वाले पूरे खंड के लिए।
\zs
अपने उत्तर में एक मूल विवरण प्रदान कर सकते हैं ?