क्या खोज हाइलाइट के अंत में कर्सर को स्थानांतरित करने के लिए Vim / Vi में कोई कमांड है?


84

क्या किसी चयनित खोज सेगमेंट में जाने के लिए Vim / Vi में कोई कमांड हैं?

उदाहरण के लिए, यदि मैं एक शब्द खोजता हूं, तो क्या हाइलाइट किए गए खंड के अंत में कर्सर को गति देने के लिए कोई कमांड हैं? कहें कि मेरे पास एक शब्द है, "फिशटैको" और मैं "फिश" के सभी उदाहरणों की खोज करना चाहता हूं और इसके बाद कुछ डालना चाहता हूं। मुझे पता है कि मैं एक वैश्विक प्रतिस्थापन कर सकता हूं, लेकिन क्या होगा अगर मैं केवल कुछ गैर-अनुक्रमिक उदाहरणों में बदलाव करना चाहता हूं?

मैं यह देख सकता था कि कार्रवाई करने के लिए वर्तमान हाइलाइट किए गए सेगमेंट के अंत में कर्सर को गति देने में सक्षम होना कहां तक ​​सुविधाजनक होगा।


3
यह सवाल का जवाब नहीं है, लेकिन सभी के Fishसाथ बदलने के अपने अंतिम लक्ष्य को प्राप्त करने के लिए FishTaco, आप कर सकते हैं :%s/Fish\(Taco\)\@!/&Taco/, जो Fishकि पहले से ही पीछा नहीं करने Tacoऔर इसे प्रतिस्थापित करने के लिए हर जगह मिलेगा FishTaco। एक नेगेटिव-लुकहेड खोज को एक प्रतिस्थापित के साथ मिलाता है जिसमें मिलान शब्द शामिल होता है Taco
जिम स्टीवर्ट

@JimStewart मुझे इस बात का कोई अंदाजा नहीं है कि इस टिप्पणी का उत्तर के रूप में कम से कम + 1 के रूप में नहीं है। यह निंजा स्तर विम है।
फिर भी

जवाबों:


133

आप इसे इसके साथ कर सकते हैं:

/Fish/e

/eअंत में खोज क्षेत्र (बजाय डिफ़ॉल्ट रूप से प्रथम चरित्र के अंत में अपने कर्सर भूमि।


32
ध्यान दें कि आप कर्सर n वर्णों को अंत से पहले या बाद में जोड़ने के लिए + n या -n जोड़ सकते हैं ।
नाथन फेलमैन

10
ध्यान देने योग्य बात यह है कि आपके द्वारा पहले ही /Fishखोज पूरी कर लेने के बाद आप अंत में कूद सकते हैं //eऔर विम 7.4 से आप gnपाए गए परिणाम को नेत्रहीन रूप से उजागर करने के लिए उपयोग कर सकते हैं ।
23

@Ghbarratt उत्तर पर भी नज़र डालें , हाइलाइट किए गए मैच पर कर्सर का पता लगाने के लिए अधिक विकल्प
नीमा

81

यदि आप मछली के अंतिम चरित्र के बाद अपना कर्सर रखना चाहते हैं तो आप उपयोग कर सकते हैं

/Fish/e+1

जो आपके कर्सर को h के बाद रखेगा। ( +1कर्सर के बिना अंतिम वर्ण के बाईं ओर समाप्त हो जाएगा।)

यदि आप विशेष रूप से मछली के बाद कर्सर रखने में रुचि रखते हैं, लेकिन केवल जब यह "फिशटैको" में दिखाई देता है तो आप निम्नलिखित विकल्पों में से एक का प्रयास कर सकते हैं:

आप उपयोग कर सकते हैं

/FishTaco/s+4

और आपका कर्सर मछली और टैको के बीच खत्म हो जाएगा। /s+44 स्थानों खोज पद की शुरुआत के बाद कर्सर देता है।

आप वैसे ही उपयोग कर सकते हैं

/FishTaco/e-3

जो आपके कर्सर को अंतिम (अंत) वर्ण के बाईं ओर बाईं ओर के 3 स्थानों पर रखेगा।

आप भी उपयोग कर सकते हैं

/FishTaco/b+4 

क्योंकि के /b+4रूप में इलाज किया जाएगा /s+4


13
महान स्पष्टीकरण, लेकिन अब मैं सिर्फ भूखा हूं।
केनी

27

यदि आपने पहले ही खोज /Fishकर ली है , तो आप खोज को मैच के अंत में जाने के लिए जल्दी से बदल सकते हैं //e, जो अंतिम खोज को दोहराता है, लेकिन उस eसंशोधक को जोड़ देता है जिसे पहले ही समझाया जा चुका है।


1
// ई + नंबर वही है जो मैं देख रहा था! बहुत बढ़िया।
सन्दूक

12

/ long-regexp1 \zs long-regexp2 / .. कर्सर \ zs पर रुकेगा , देखें: help \ zs


11

एक बार जब आपके पास दृश्य चयन होता है, तो आप oचयनित ब्लॉक के प्रारंभ और अंत के बीच कर्सर की स्थिति को टॉगल करने के लिए उपयोग कर सकते हैं । जब चयन लाइन-वार होता है, तो यह लाइन पोजीशन को बढ़ा देता है , जिसका अर्थ है कि कर्सर चयन की शुरुआत और अंतिम पंक्ति में जाता है, लेकिन शुरुआत या समाप्ति चरित्र के लिए नहीं। जब चयन चरित्र-वार होता है तो आंदोलन चरित्र-वार भी होता है।

आप विज़ुअल ब्लॉक की शुरुआत और समाप्ति के बीच कर्सर का उपयोग `<और `>टॉगल भी कर सकते हैं , हालांकि यह चयन को प्रभावित करता है, इसलिए इसका उपयोग चयन सीमा को रीसेट या समायोजित करने के लिए किया जाता है।

संपादित करें: आह, लेकिन खोज हाइलाइट्स के लिए यह काम नहीं करेगा, क्योंकि oएक लाइन प्रविष्टि आरंभ करेगा। मुझे लगता है कि खोज हाइलाइट दृश्य चयन के समान नहीं है, क्षमा करें :)


मुझे नहीं पता था कि या तो। यह बिना शुरू किए चयन की शुरुआत को संशोधित करने के लिए बहुत अच्छा है। (जैसे आपने एक शब्द का चयन बहुत जल्द या बहुत देर से शुरू किया है)
टिमोथी बाउचर

8

आपके प्रश्न का "मैच के अंत में कर्सर" पहले से ही उत्तर दिया गया है।

आप कर सकते हैं :%s/Fish/FishTaco/c। यह आपको हर प्रतिस्थापन की पुष्टि या अस्वीकार करने का अवसर देता है और पूरे "कर्सर को मैच" व्यवसाय के अंत में छोड़ देता है।


बहुत बढ़िया टिप। अगर मैं 'y' दर्ज करता हूं तो यह केवल पहले पर रिप्लेसमेंट करता है। मैं इसे हर एक के लिए कैसे पुष्टि करूँ?
जॉर्डन पैरामर

1
यह अगले मैच में जाता है और आपके पास टाइप करने के लिए इंतजार करता है yया nतब तक जब तक कि कोई मैच न बचा हो। आगे सभी प्रतिस्थापन स्वीकार करने के लिए, aउन्हें अस्वीकार करने के लिए, टाइप करें q
रोमेनैल

1
दरअसल, मैं gफाइनल के बाद से गायब था /इसलिए यह मेरी लाइन में जारी नहीं था। पारितोषिक के लिए धन्यवाद।
जॉर्डन पैरामर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.