2012-08-16 18 views
6

अक्सर मैं इस तरह खोज करने के लिए और vim में की जगह चाहते बदलें:विम खोजें और क्षमता

:%s/<search_pattern>/<search_pattern>_foo/g 

इस वाक्य रचना और प्रभावी बनाने के लिए इतना है कि मैं संदर्भित कर सकते हैं बदलने के मूल्य में <search_pattern> कोई तरीका है? मुझे लगता है कि यह समूह नाम/संख्या द्वारा संदर्भित कुछ समान होगा, लेकिन मुझे इस पर कोई दस्तावेज़ नहीं मिल रहा है।

उत्तर

13

प्रतिस्थापन में मिलान पैटर्न का प्रतिनिधित्व करने के & वर्ण का उपयोग करें:

:%s/<search_pattern>/&_foo/g 

वैकल्पिक रूप से आप \0 उपयोग कर सकते हैं, जो पूरी मिलान किया पैटर्न के लिए एक बैक-संदर्भ है, और इसलिए याद करने के लिए आसान हो सकता है:

:%s/<search_pattern>/\0_foo/g 

देखें :help sub-replace-special

और, धन्यवाद @kev को, यो यू प्रतिस्थापन में __foo_ द्वारा प्रतिस्थापित किया जा करने के लिए \zs, उपयोग करके अपने खोज स्ट्रिंग के अंत में एक खाली पैटर्न मजबूर कर सकते हैं:

:%s/<search_pattern>\zs/_foo/g 

इसका मतलब यह है: __foo_ साथ खोज स्ट्रिंग के अंत की जगह।

+3

'% s/ \ zs/_foo/g' काम करता है भी। – kev

3

आप या तो संपूर्ण खोज पैटर्न के लिए & का उपयोग कर सकते हैं, या आप पैटर्न के किसी अनुभाग से मेल खाने के लिए समूहों का उपयोग कर सकते हैं। & का उपयोग करना:

:%s/<search_pattern>/&_foo/g 

यह जो आप खोज रहे हैं उसे पूरा करेगा। यदि आपको कुछ और जटिल उपयोग समूहों की आवश्यकता है। एक समूह बनाने के लिए, खोज पैटर्न के आस-पास भाग (भाग गए) कोष्ठक के साथ। इसके बाद आप \n के साथ संदर्भित कर सकते हैं, जहां n समूह संख्या है। एक उदाहरण इसे बेहतर समझाएगा।

आप निम्न फ़ाइल है:

bread,butter,bread,bread,bread,butter,butter,etc 

आप bread and butter को bread,butter के किसी भी मामले बदलना चाहते हैं:

:%s/\(bread\),\(butter\)/\1 and \2/g 
संबंधित मुद्दे