`vi`

2009-04-21 9 views
44

में चयन के भीतर खोजें और बदलें vi में चयन के भीतर मैं एक खोज और प्रतिस्थापन कैसे करूं?`vi`

उत्तर

50

दृश्य मोड (मुझे लगता है कि आप क्या कर रहे है), तो : प्रेस एक कमांड टाइप करना आरंभ करने के लिए पाठ का चयन करें, तो आप इस तरह दिखाई देगा आदेश पंक्ति में दिखाई देते हैं:

:'<,'> 

इसका मतलब है कि आदेश चयन पर लागू होगा। फिर s/search/replace/ टाइप करें और एंटर दबाएं। के लिए (एक c तीसरे स्लैश के बाद किसी g जोड़े यदि आप सभी मैचों बदलना चाहते हैं, और यदि आप एक पुष्टिकरण चाहते हर की जगह के लिए)

+28

चेतावनी: सीमा केवल लाइनवाइज काम करती है! यदि आपके चयन में केवल एक पंक्ति का हिस्सा होता है तो खोज और प्रतिस्थापन पूरी लाइन पर काम करेगा। आंशिक रेखा ढूंढना और प्रतिस्थापित करना स्क्रिप्टिंग afaik की आवश्यकता है। – user55400

+2

मैं सुझाव देता हूं कि अस्थायी रूप से इसे एक अलग पंक्ति पर ले जाया जाए, प्रतिस्थापित किया जा सके और इसे वापस ले जाया जा सके। –

13

यदि आप फिर चुनने के लिए, दृश्य मोड का प्रयोग किया:

:'<,'>s/regex/replacement/options 

विम रेंज ('<,'>) स्थापित करेंगे स्वचालित रूप से अगर आप ':' दबाकर कमांड लाइन मोड (में जाने) दृश्य मोड के भीतर से।

+1

यह सैद्धांतिक रूप से इरादे से काम करना चाहिए, लेकिन जैसा कि किसी और ने इंगित किया है, अभ्यास में कहीं भी उन जगहों के भीतर जगह ले जाती है जहां चिह्न '<' शुरू होता है और कहां '> समाप्त होता है। हो सकता है कि इसे '\%'> 'परमाणु के साथ काम करना संभव हो .. लेकिन मेरे शुरुआती प्रयोग विफल रहे। –

+0

आप सही हैं। मैंने कभी नहीं देखा। – Tomalak

-3

आप एक वैश्विक खोज करते हैं और (वैकल्पिक regexes के साथ) बदलना चाहते हैं फ़ाइल में सभी उदाहरण, मैं निम्नलिखित करता हूं:

:%s/foo/bar/g 

जी को स्थानीय प्रतिस्थापन करने के लिए छोड़ दें।

+0

स्थानीय वर्तमान लाइन – Lazarus

66

यहां सुझाए गए अन्य समाधानों में से अधिकांश समाधान उस पंक्ति में काम करते हैं जिसमें चयन होता है, जो आप नहीं चाहते हैं।

खोज करने के लिए और केवल चयन में बदलने के लिए, पहले नेत्रहीन पाठ का चयन करें, तो जैसे एक आदेश का उपयोग करें:

:%s/\%VSEARCH/REPLACE/g 

इस खोज करते हैं और केवल नेत्रहीन चयनित खंड में बदल देगा, साथ खोज की जगह बदलने के। यदि आपके पास एक से अधिक पंक्तियां चुनी गई हैं, तो यह कई लाइनों पर भी काम करेगी।

+0

के लिए स्थानीय है क्या यह एक लाइन के हिस्से का चयन करते समय प्रतिस्थापन के लिए काम करना चाहिए? मैं रिक्त स्थान को बदले में बदलने के लिए इसे काम नहीं कर सकता। मैं लाइन का हिस्सा चुन रहा हूं और वे बिना किसी खुशी के ''% s/\% V/\ r/g' का उपयोग कर रहे हैं। पहली जगह बदल दी गई है, लेकिन निम्नलिखित 4 छूटे रहते हैं। – bentayloruk

+0

मैंने अभी कोशिश की है, और यह मेरे द्वारा किए गए सभी मामलों के लिए काम करता है, रिटर्न के साथ बदलने के अलावा ;-) मुझे लगता है कि यह होना चाहिए क्योंकि पहली जगह चयन को एक नई लाइन में तोड़ देती है, जो अब चयन में नहीं है। एक वर्कअराउंड के रूप में आप एक अद्वितीय स्ट्रिंग के साथ प्रतिस्थापित कर सकते हैं, उदा। EZ_REPLACE, फिर वैश्विक खोज करें और उस के लिए प्रतिस्थापित करें ... –

+0

मैक्रो में रिकोड किए जाने पर अच्छी तरह से नहीं खेलता है। लाइनों की एक श्रृंखला पर मैक्रो को फिर से चलाने से काम नहीं होता है। –

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