VIM खोजने / खोजने में बैकस्लैश और फॉरवर्ड स्लैश से कोई कैसे बचता है?


96

उदाहरण के लिए, अगर मैं पिछड़े या आगे वाले स्लैश वाले तारों को ढूंढना और बदलना चाहता हूं, तो यह कैसे पूरा होगा? धन्यवाद!

उदाहरण ढूंढें और प्रतिस्थापित करें: :%s/foo/bar/g

क्या होगा अगर मैं सभी घटनाओं को ढूंढना चाहता हूं <dog/>और इसे प्रतिस्थापित करना चाहता हूं<cat\>


3
सख्ती से जवाब नहीं, लेकिन आपको शायद पढ़ना चाहिए: जादू की मदद करें
टॉम मॉरिस

+1 टॉम, आम तौर पर तुच्छ regex से अधिक के साथ काम करते समय सबसे अधिक समाधान।
रैंडी मॉरिस

@Tom @Randy हालांकि ... vi --helpमेरे सर्वर पर विशेष वर्णों से बचने का स्पष्टीकरण नहीं दिया गया है ... यही कारण है कि लोग
स्टिवओवरफ्लो के

@ असाल्सब :help magicऐसी चीज है जिसे आप विम के अंदर टाइप करते हैं । यह कोई कमांड-लाइन तर्क नहीं है।
डबलडाउन

जवाबों:


150

एक ही तरह से आप वर्णों के कार्यक्रमों में कहीं भी बच सकते हैं, एक बैकस्लैश के साथ:

:%s/<dog\/>/<cat\\>

लेकिन ध्यान दें कि आप इसके बजाय एक भिन्न सीमांकक का चयन कर सकते हैं:

:%s@<doc/>@<cat\\>@

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

से प्रलेखन :

इसके बजाय /जो पैटर्न और प्रतिस्थापन स्ट्रिंग को घेरता है, आप किसी अन्य एकल-बाइट वर्ण का उपयोग कर सकते हैं, लेकिन अल्फ़ान्यूमेरिक वर्ण \, "या नहीं |। यदि आप /खोज पैटर्न या प्रतिस्थापन स्ट्रिंग में शामिल करना चाहते हैं तो यह उपयोगी है ।


1
तो यह स्वचालित रूप से आपके चुने हुए सीमांकक का पता लगाएगा?
तूफान

11
हाँ। के बाद के चरित्र sको सीमांकित किया जाता है। मैं यह पता नहीं लगा सकता कि मुझे दस्तावेज़ में कोई सूची कहाँ मिली है, लेकिन मुझे पूरा यकीन है कि कम से कम /:;*%@#वैध हैं।
Cascabel

विंडोज-स्टाइल पथ के बहुत से फ़ाइल में \ / को प्रतिस्थापित करने पर यह काम आता है। धन्यवाद।
इसहाक नेक्विटेपस

प्रलेखन में उस संदेश को पाने के लिए, उपयोग करें: h e146
jcollado

पता नहीं था कि आप सीमांकक को बदल सकते हैं! यह बहुत बड़ा है - धन्यवाद।
ब्रेटिन्स

22
%s:<dog/>:<cat>

यदि आप कुछ पैटर्न के लिए परेशान हो जाते हैं, तो आप / delimiters को बदल सकते हैं।


3
:सीमांकक के लिए +1 । मुझे नहीं पता था कि आप इसका इस्तेमाल कर सकते हैं। मैं हमेशा @'एस्केप-मेस' के समय में इस्तेमाल करता था
जेफरी जोस

8

उन्हें एक बैकस्लैश के साथ उद्धृत करें। इसके अलावा, यह अक्सर स्लैश के अलावा एक और सीमांकक का उपयोग करने में मदद करता है।

 :%s#<dog/>#<cat\\>#

या यदि आपको विकल्प कमांड सीमांकक के रूप में स्लैश का उपयोग करना है

 :%s/<dog\/>/<cat\\>/


2

मैं कुछ इसी तरह की तलाश कर रहा था, /चरित्र वाले रजिस्टर मूल्यों की खोज करने के लिए (एक मैक्रो रिकॉर्ड करने के लिए)। समाधान के ?बजाय टोकन का उपयोग करके खोज करना था /


ध्यान दें कि ?एक पिछड़ी खोज करेंगे, और ऐसा नहीं है।
मार्टिन टूरनोइज

-1

बैकस्लैश स्लैश बैकस्लैश स्टार

/(<- the prompt)\/\*

इसलिए टाइप करने के बाद यह दिखता है

/\/\*

1
यह उत्तर उन लोगों से कैसे अलग है जो छह साल से साइट पर हैं?
मार्टिन टूरनोइज
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.