2011-04-28 14 views
10

में खोजें/बदलें, मैं इस रेगेक्स के अनुरूप स्क्वायर ब्रैकेट्स की सभी घटनाओं को हटाना चाहता हूं: \[.*\].*{, लेकिन मैं केवल ब्रैकेट को हटाना चाहता हूं, न कि क्या - यानी, मैं ब्रैकेट को हटाना चाहता हूं और उनके अंदर क्या है , केवल तभी जब वे एक उद्घाटन घुंघराले ब्रेस द्वारा पीछा किया जाता है।विम

मैं विम की खोज/प्रतिस्थापन के साथ ऐसा कैसे करूं?

उत्तर

13

आप \zs और \ze उपयोग कर सकते हैं शुरुआत और मैच के अंत स्थापित करने के लिए।

:%s/\zs\[.*\]\ze.*{//g काम करना चाहिए।

आप विम को एक खाली स्ट्रिंग द्वारा \zs और \ze के बीच बदलने के लिए कह रहे हैं।

(ध्यान दें कि आप + वाक्यविन्यास विकल्प आपके विम बाइनरी में संकलित की जरूरत है)

अधिक जानकारी के लिए, :help /\zs या :help pattern

संपादित: असल में \ ZS इस मामले में आवश्यक नहीं है, लेकिन मैं इसे शैक्षणिक उद्देश्य के लिए छोड़ दें। :)

+0

मुझे नहीं पता था कि यह अस्तित्व में था! उत्कृष्ट टिप! –

0

यह वर्तमान फ़ाइल पर अपने रेगुलर एक्सप्रेशन से चलेंगे:

:%s/\[.*\]\(.*{\)/\1/g

+0

वास्तव में मेरी समस्या है कि फिर से उपयोग करने के लिए प्राप्त करने के लिए एक खोज पद के बिना% s आदेश चला, मैं घुंघराले ब्रेस रखने के लिए और केवल कोष्ठक हटाना चाहते हैं और क्या उन्हें अंदर है । –

+0

ओह, मुझे यकीन नहीं था कि आपको विम में रेगेक्स के लिए सिंटैक्स की आवश्यकता है या नहीं। मैंने अपने उत्तर को एक और संभावित समाधान के साथ संपादित किया, हालांकि अब कई कामकाजी उत्तर पोस्ट किए गए हैं। –

2

कैसे के बारे में:

:%s#\[.*\]\ze.*{##g 

ध्यान दें कि \ze आइटम मैच की समाप्ति का सूचक है, तो कुछ भी इस प्रकार है कि जगह नहीं है। अपने को बदलने के

3

आप कोष्ठक में अपने regex के अंतिम बिट के चारों ओर, तो आप इसे में फिर से उपयोग कर सकते हैं:

:%s/\[.*\]\(.*{\)/\1/g 

\ 1 संदर्भ कोष्टक में regex का हिस्सा है।

मैं इससे पहले कि मैं खोज में इसका इस्तेमाल करते हैं मेरी खोज स्ट्रिंग का निर्माण और यकीन है कि यह सही है इससे पहले कि मैं दस्तावेज़ बदल बनाने के लिए बदलना चाहते:

/\[.*\]\(.*{\) 

यह तुम क्या बदल देगा के सभी occurrances पर प्रकाश डाला जाएगा ।
तो यह पिछले खोज पद

:%s//\1/g