2009-11-06 10 views
48

, खोज और प्रतिस्थापित करें, आप '/' (आगे स्लैश) से कैसे बचते हैं ताकि यह सही हो। एक रास्ते में कहो।/vi में खोज और प्रतिस्थापित करें? Vi में

की तरह:/उपयोगकर्ताओं/टॉम/दस्तावेज/pdfs/

:%s//Users/tom/documents/pdfs//<new text>/g --FAILS (obviously) 

:%s/\/Users/tom/documents/pdfs\//<new text>/g -- FAILS with a trailing error 

:%s/'/Users/tom/documents/pdfs/'/<new text>/g -- FAILS with a trailing error 

मैं क्या याद आ रही है?

+1

संभावित डुप्लिकेट [कैसे एक से बचता है और वीआईएम खोज/खोज में स्लैश आगे बढ़ता है?] (Http://stackoverflow.com/questions/2465156/how-does-one-escape-backslashes-and-forward-slashes -इन-विम-खोज-खोज) – Pureferret

उत्तर

55

आपको आंतरिक रूप से आगे की स्लैश से बचने की भी आवश्यकता है।

:%s/\/Users\/tom\/documents\/pdfs\//<new text>/g 
+0

@ सराह - दोह! हाँ धन्यवाद! –

96

वैकल्पिक रूप से आप :%s,foo/bar/baz,foo/bar/boz,g कर सकते हैं - मैं लगभग कभी नहीं उपयोग से बचने के भ्रम की वजह से स्लैश।

+0

दोस्त, मुझे इसके बारे में पता नहीं था! मुझे लगता है कि आप फ़ील्ड को सीमित करने के लिए किसी भी चरित्र का उपयोग कर सकते हैं? –

+0

हाँ मुझे विश्वास है, मैं बस अल्पविराम के आदी हो गया। –

+0

आपने मुझे कुछ सेकंड से हराया :) – Bob

14

जैसा कि सारा ने सुझाव दिया था, आपको सभी आगे की स्लैश से बचने की जरूरत है।

आप इसके बजाय आगे के स्लैश के अलावा डिलीमीटर के रूप में एक और चरित्र का उपयोग कर सकते हैं। यह आसान है अगर आपकी खोज स्ट्रिंग में बहुत सारी स्लैश हैं।

:%s#/Users/tom/documents/pdfs/#<new test>#g 

यह पूरी तरह से vim में काम करता है। मैं वेनिला वी के बारे में 100% निश्चित नहीं हूँ।

+0

मैं इस बारे में नहीं सोच सकता कि आप इन दिनों वीआई में कैसे पहुंचेंगे। मैं सोच रहा था कि अधिकांश प्रमुख लिनक्स डिस्ट्रोज़ सिर्फ 'vi' को रीडायरेक्ट करते हैं ताकि कई सुविधाएं बंद हो जाएं। –

+2

क्योंकि लिनक्स एकमात्र ओएस नहीं है :) कई बीएसडी जहाज वेनिला वी या एनवी के साथ जहाज में से अधिकांश वाणिज्यिक यूनिक्स सिस्टम भी करते हैं। मुझे याद है (दुखी) IRIX पर vim संकलित करने के दिन क्योंकि मैं वेनिला वी के साथ नहीं रह सका। – Bob

+0

बहुत पहले नहीं डेबियन ने एनबीआई से जुड़े, जैसा नेटबीएसडी, फ्रीबीएसडी और ओपनबीएसडी किया था। कुछ भी vim-as-vim के साथ भेज दिया। – DigitalRoss

3

मुझे पता है कि यह प्रश्न कई साल पुराना है, लेकिन 2014 में, जो इस पर एक आसान समाधान खोजने के लिए जमीन पर उतर सकता है, आप "/" जैसे किसी अन्य चीज़ के लिए "/" डिलीमीटर को प्रतिस्थापित कर सकते हैं, आप सामने, बीच में यह करते हैं, और वापस, इस तरह:

:%s!foo/bar/baz!foo/bar/boz!g 

मेडर के जवाब देने के लिए बहुत simiar ... लेकिन, मुझे लगता है कि विस्मयादिबोधक एक विभाजक के रूप में देखने के लिए बहुत आसान है। और मैं सिर्फ यह पुष्टि करना चाहता था कि यह विधि अभी भी वीआईएम के वर्तमान संस्करण में काम करती है, जिसे मैं मैक ओएसएक्स मैवरिक्स में उपयोग कर रहा हूं।

2

आप खोज करने के लिए

एक रजिस्टर में पैटर्न खोज के मामले में ? उपयोग कर सकते हैं, और पैटर्न, तो आप बस सामान्य मोड से / आदेश के बजाय ? आदेश का उपयोग पैटर्न मिलान शुरू करने के लिए कर सकते हैं एक '/' वर्ण है । ऐसे मामले में, '/' char के लिए कोई और बचाना आवश्यक नहीं है। (हालांकि आपको अब '?' char से बचने की जरूरत है)

?/ की विपरीत दिशा में खोज करेगा, इसलिए यदि आपको खोज दिशा पर कोई ध्यान नहीं है, और आपके खोज पैटर्न में '?' नहीं है चार।

इसके अलावा, यदि आप और चाहते हैं तो escape() स्क्रिप्ट देखें।

+0

प्रतिभा! मैं बस खोज रहा था ('' 'के साथ) और प्रतिस्थापित नहीं कर रहा था, इसलिए मेरे पास बदलने के लिए कोई डिलीमीटर नहीं था। – Noumenon

संबंधित मुद्दे