में चयन के भीतर खोजें और बदलें vi
में चयन के भीतर मैं एक खोज और प्रतिस्थापन कैसे करूं?`vi`
`vi`
उत्तर
दृश्य मोड (मुझे लगता है कि आप क्या कर रहे है), तो :
प्रेस एक कमांड टाइप करना आरंभ करने के लिए पाठ का चयन करें, तो आप इस तरह दिखाई देगा आदेश पंक्ति में दिखाई देते हैं:
:'<,'>
इसका मतलब है कि आदेश चयन पर लागू होगा। फिर s/search/replace/
टाइप करें और एंटर दबाएं। के लिए (एक c
तीसरे स्लैश के बाद किसी g
जोड़े यदि आप सभी मैचों बदलना चाहते हैं, और यदि आप एक पुष्टिकरण चाहते हर की जगह के लिए)
कुछ और अधिक मदद यहाँ Search and replace in a visual selection
यदि आप फिर चुनने के लिए, दृश्य मोड का प्रयोग किया:
:'<,'>s/regex/replacement/options
विम रेंज ('<,'>
) स्थापित करेंगे स्वचालित रूप से अगर आप ':'
दबाकर कमांड लाइन मोड (में जाने) दृश्य मोड के भीतर से।
यह सैद्धांतिक रूप से इरादे से काम करना चाहिए, लेकिन जैसा कि किसी और ने इंगित किया है, अभ्यास में कहीं भी उन जगहों के भीतर जगह ले जाती है जहां चिह्न '<' शुरू होता है और कहां '> समाप्त होता है। हो सकता है कि इसे '\%'> 'परमाणु के साथ काम करना संभव हो .. लेकिन मेरे शुरुआती प्रयोग विफल रहे। –
आप सही हैं। मैंने कभी नहीं देखा। – Tomalak
आप एक वैश्विक खोज करते हैं और (वैकल्पिक regexes के साथ) बदलना चाहते हैं फ़ाइल में सभी उदाहरण, मैं निम्नलिखित करता हूं:
:%s/foo/bar/g
जी को स्थानीय प्रतिस्थापन करने के लिए छोड़ दें।
स्थानीय वर्तमान लाइन – Lazarus
यहां सुझाए गए अन्य समाधानों में से अधिकांश समाधान उस पंक्ति में काम करते हैं जिसमें चयन होता है, जो आप नहीं चाहते हैं।
खोज करने के लिए और केवल चयन में बदलने के लिए, पहले नेत्रहीन पाठ का चयन करें, तो जैसे एक आदेश का उपयोग करें:
:%s/\%VSEARCH/REPLACE/g
इस खोज करते हैं और केवल नेत्रहीन चयनित खंड में बदल देगा, साथ खोज की जगह बदलने के। यदि आपके पास एक से अधिक पंक्तियां चुनी गई हैं, तो यह कई लाइनों पर भी काम करेगी।
के लिए स्थानीय है क्या यह एक लाइन के हिस्से का चयन करते समय प्रतिस्थापन के लिए काम करना चाहिए? मैं रिक्त स्थान को बदले में बदलने के लिए इसे काम नहीं कर सकता। मैं लाइन का हिस्सा चुन रहा हूं और वे बिना किसी खुशी के ''% s/\% V/\ r/g' का उपयोग कर रहे हैं। पहली जगह बदल दी गई है, लेकिन निम्नलिखित 4 छूटे रहते हैं। – bentayloruk
मैंने अभी कोशिश की है, और यह मेरे द्वारा किए गए सभी मामलों के लिए काम करता है, रिटर्न के साथ बदलने के अलावा ;-) मुझे लगता है कि यह होना चाहिए क्योंकि पहली जगह चयन को एक नई लाइन में तोड़ देती है, जो अब चयन में नहीं है। एक वर्कअराउंड के रूप में आप एक अद्वितीय स्ट्रिंग के साथ प्रतिस्थापित कर सकते हैं, उदा। EZ_REPLACE, फिर वैश्विक खोज करें और उस के लिए प्रतिस्थापित करें ... –
मैक्रो में रिकोड किए जाने पर अच्छी तरह से नहीं खेलता है। लाइनों की एक श्रृंखला पर मैक्रो को फिर से चलाने से काम नहीं होता है। –
चेतावनी: सीमा केवल लाइनवाइज काम करती है! यदि आपके चयन में केवल एक पंक्ति का हिस्सा होता है तो खोज और प्रतिस्थापन पूरी लाइन पर काम करेगा। आंशिक रेखा ढूंढना और प्रतिस्थापित करना स्क्रिप्टिंग afaik की आवश्यकता है। – user55400
मैं सुझाव देता हूं कि अस्थायी रूप से इसे एक अलग पंक्ति पर ले जाया जाए, प्रतिस्थापित किया जा सके और इसे वापस ले जाया जा सके। –