2011-12-16 13 views
8

मैं के लिए $data['user'] को खोजने और बदलने की कोशिश कर रहा हूं।विम खोज/प्रतिस्थापित करें: मुझे भागने की क्या ज़रूरत है?

हालांकि, कोई फर्क नहीं पड़ता कि मैं किस खोज स्ट्रिंग का उपयोग करता हूं, मुझे इसके परिणामस्वरूप हमेशा "पैटर्न नहीं मिला" मिलता है।

तो, सही खोज स्ट्रिंग क्या होगी? क्या मुझे इनमें से किसी भी पात्र से बचने की ज़रूरत है? :%s/$data['user']/$data['sessionUser']/g

उत्तर

2
:%s/\$data\[\'user\'\]/$data['sessionUser']/g 

मैं यह परीक्षण नहीं किया, लेकिन मुझे लगता है कि यह काम करना चाहिए।

+2

आपको प्रतिस्थापन भाग में भागने की आवश्यकता नहीं है। –

+0

हाँ, यह काम किया। धन्यवाद! – Falassion

1

[ char का रेगेक्स में अर्थ है। यह character ranges के लिए खड़ा है। $ char का अर्थ भी है। यह end-line anchor के लिए खड़ा है। तो आपको बहुत सी चीजों से बचना है। मेरा सुझाव है कि आप this या यह one जैसी छोटी प्लगइन आज़माएं और दृश्य खोज का उपयोग करें।

+0

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

2

खोजें और vim में बदलने के sed के लगभग समान है, तो के रूप में आपको लगता है कि के साथ होता ही पलायन का उपयोग करें:

:%s/\$data\['user'\]/$data['session']/g 

नोट है कि आप केवल वास्तव में खोज भाग में विशेष वर्ण (भाग से बचने के लिए की जरूरत है // एस के पहले सेट के बीच)। प्रतिस्थापन भाग में भागने के लिए आपको एकमात्र चरित्र बचाना चरित्र \ स्वयं (जिसे आप यहां उपयोग नहीं कर रहे हैं) है।

+0

दूसरे '//' के बारे में दिलचस्प जानकारी। इसके लिए धन्यवाद्। – Falassion

2

दिया जवाब के साथ साथ कुछ गलत नहीं है, लेकिन आप यह कर सकते हैं:

:%s/$data\['\zsuser\ze']/sessionUser/g 

\zs और \ze मैच कि प्रतिस्थापन से प्रभावित होता है का हिस्सा परिसीमित करने के लिए इस्तेमाल किया जा सकता। आपको $ से बचने की आवश्यकता नहीं है क्योंकि यह पैटर्न की शुरुआत में है और यहां एक ईओएल से मेल नहीं खा सकता है। और आपको ] से बचने की आवश्यकता नहीं है क्योंकि इसकी मिलान [ से मेल नहीं खाती है। हालांकि अगर आप सभी नियमों को याद नहीं कर सकते हैं तो इन पात्रों से बचने में निश्चित रूप से कोई नुकसान नहीं है। देखें: पूर्ण विवरण के लिए pattern.txt मदद करें, लेकिन इसे एक ही बार में पचाने की कोशिश न करें!

आप कल्पना प्राप्त करना चाहते हैं, तो आप कर सकते हैं:

:%s/$data\['\zsuser\ze']/session\u&/g 

& पूरे मिलान वाला पाठ (\zs और \ze वर्तमान अगर द्वारा सीमांकित) को संदर्भित करता है, तो यह इस मामले में 'उपयोगकर्ता' बन जाता है। \u जब प्रतिस्थापन स्ट्रिंग में उपयोग किया जाता है तो अगला वर्ण ऊपरी-केस बनाता है। आशा है कि ये आपकी मदद करेगा।

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