VIM का उपयोग करके बदलें, खोज पैटर्न का पुन: उपयोग करें


29

मैं साथ काम कर रहा हूं VImऔर कुछ प्रतिस्थापन करने के लिए एक खोज स्थापित करने और कमांड को बदलने की कोशिश कर रहा हूं, जहां मैं नियमित अभिव्यक्ति का उपयोग कर सकता हूं जो मेरे खोज स्ट्रिंग का हिस्सा है।

एक साधारण उदाहरण के लिए एक लाइन है, जहां मैं बदलना चाहते हो जाएगा (10)करने के लिए {10}है, जहां 10 किसी भी संख्या हो सकती है।

मैं यह आया था

  .s/([0-9]*)/what here??/

जो मेरे इच्छित भाग से मेल खाता है।

अब प्रतिस्थापन, मैंने कोशिश की

  .s/([0-9]*)/{\0}/

लेकिन, यह आउटपुट के रूप में देता है {(10)}

फिर, मैंने कोशिश की

 .s/(\zs[0-9]*\ze)/{\0}/

हालांकि, उसने मुझे दिया ({10}), जिसे मैं भी बंद कर देता हूं, लेकिन वह नहीं जो मैं चाहता हूं।

मुझे लगता है कि मुझे इसके बजाय किसी अन्य प्रकार के अंकन / बैक-रेफ़रिंग की आवश्यकता है \0, लेकिन मुझे नहीं पता कि कहाँ देखना है। तो सवाल यह है कि क्या यह किया जा सकता है, और यदि हां, तो कैसे?

जवाबों:


37

\0पूरा मैच है। इसके केवल भाग का उपयोग करने के लिए आपको इसे इस तरह सेट करना होगा और \ 1 का उपयोग करना होगा

.s/(\([0-9]*\))/{\1}/

अधिक विस्तृत निर्देश आप यहां पा सकते हैं या विम मदद कर सकते हैं ।


ध्यान दें कि कैप्चर के लिए कोष्ठक बैकस्लैश-बच गए हैं।
रान्डेल

0

मुझे हाल ही में कुछ विरासत कोड विरासत में मिले और मैं सभी घटनाओं को बदलना चाहता था जैसे:

print "xx"
print x,y
print 'xx'

सेवा मेरे

logging.info("xy") 

या

logging.info(x,y)

पिछले उत्तर पर निर्माण करना और इस उम्मीद में कि कोई व्यक्ति इससे लाभान्वित होगा, मैंने निम्न कमांड का उपयोग किया है, जो सभी घटनाओं को बदल देगा:

%s/print\( .*\)/logging.info\(\1\)/g

आप के %साथ स्थानापन्न .और हटाने के लिए /gआप के साथ खत्म हो जाएगा

.s/print\( .*\)/logging.info\(\1\)

जो आपको प्रत्येक मैच में जाने और चुनने के लिए सक्षम करेगा कि आप इसे बदलते हैं या नहीं।


0

प्रत्येक मैच पर जाने के लिए सक्षम करने का बेहतर तरीका यह है कि आप लाइन-दर-लाइन के बजाय कोड के अंत में एक "सी" जोड़ें।

%s/print\( .*\)/logging.info\(\1\)/gc

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