विम में "अगला खोजें"


535

Vim के लिए आगे की खोज करने के लिए cake, मैं टाइप करूँगा /cake, लेकिन जब मैं रिटर्न प्रेस करूँगा तो कर्सर पहले मैच में कूद जाएगा। क्या "अगला ढूंढना" के अनुरूप एक विम कमांड है?


33
उपयोग करने की आदत डालें :help:help /खोज के बारे में मदद दिखाता है, और आपके प्रश्न का उत्तर पृष्ठ से थोड़ा सा नीचे दिखाई देता है।
क्रिस मॉर्गन

जवाबों:


876

यह nअगले और Nपिछले के लिए है।

और यदि आप इसके बजाय ?(उदाहरण के लिए ?cake) के साथ रिवर्स खोज का उपयोग करते हैं /, तो यह दूसरा तरीका है।

यदि यह आपके सिस्टम पर स्थापित है, तो आपको vimtutorअपने टर्मिनल से कमांड चलाने की कोशिश करनी चाहिए , जो कि बेसिक विम कमांड्स का ट्यूटोरियल शुरू करेगा।

रोब वेल्स के बारे में सलाह* और #भी बहुत प्रासंगिक है।


1
इंडेक्स सर्च प्लगइन vim.org/scripts/script.php?script_id=1682
SergioAraujo

क्या अगले मैच में कूदने का एक तरीका है (वर्तमान लाइन में नहीं)?
user13107

@ user13107: n और N पूरे बफ़र / फ़ाइल पर काम करते हैं। आप वर्तमान लाइन तक सीमित नहीं हैं।
जेवियर टी।

@XavierT। किसी भी विचार, मैं कैसे खोज में परिणाम की एक निश्चित संख्या कूद कर सकते हैं। मेरा मतलब है कि 10 वीं मिलान लाइन पर उदाहरण के लिए कूदो
जीपी सायबॉर्ग

@ गिसेबॉर्ग: nजैसे अधिकांश वीम ऑपरेटर को कमांड दोहराने के लिए एक संख्या के साथ उपसर्ग किया जा सकता है। यदि आप लिखते हैं तो 10nयह 10 वीं के परिणाम (प्रारंभिक एक के बाद) में चला जाएगा। यह सभी मोशन ऑपरेटर के लिए भी काम करता है जैसे 3jकि 3 लाइनें नीचे जाना।
जेवियर टी।

210

विम, IMHO में सबसे उपयोगी शॉर्टकट *कुंजी है।

कर्सर को एक शब्द पर रखें और *कुंजी को हिट करें और आप उस शब्द के अगले उदाहरण पर कूद जाएंगे।

#कुंजी एक ही करता है, लेकिन यह शब्द का पिछला उदाहरण के लिए कूदता है।

यह वास्तव में एक समय बचाने वाला है।


6
और अगर यह स्पष्ट नहीं था, nऔर एक बार प्रेस करने के बाद आपको मैचों के Nमाध्यम से आगे और पीछे ले जाना चाहिए । (या आप आगे बढ़ने के लिए या पीछे जाने के लिए बस दबाकर रख सकते हैं, लेकिन उन स्थानांतरित-कुंजियों का उपयोग करना आमतौर पर उप-इष्टतम है।)***#
हर्बर्ट सिट्ज

3
@ हर्बर्ट, वास्तव में एन और एन आपको "आगे" और "पिछड़े" सम्मान नहीं लेते हैं। जैसा कि @Xavier ऊपर उल्लेख किया गया है, n अगला है और N पिछले है । आगे और पीछे की खोज का नियंत्रण खोज को '/' कुंजी और '' के साथ जोड़कर किया जाता है? कुंजी या '*' कुंजी और '#' कुंजी के साथ।
रॉब वेल्स

मुझे नहीं लगता कि यह उपयोगी है ... अधिकांश समय मैं एक शब्द के टुकड़े की खोज कर रहा हूं (उदाहरण के लिए, फ़ंक्शन नाम का एक हिस्सा)। मैं नहीं करना चाहता /Func, क्या यह मुझे ले गया है SomeFuncऔर फिर '*' दबाएं SomeFuncजब अगली आवृत्ति के अगले उदाहरण में Funcजाना हो SomeOtherFunc
weberc2

इससे भी बदतर, C ++ के साथ, मुझे लगता है कि यह विधि आह्वान से विधि कार्यान्वयन तक /\<foo\>नहीं जाता क्योंकि मेल नहीं खाता"className::foo()"
puk

84

जब मैं शुरुआत कर रहा था तो मुझे एक डेमो देखने की जरूरत थी ।

विम में कैसे खोज करें

  1. प्रकार /
  2. प्रकार खोज शब्द "उदा"
  3. दबाएँ enter
  4. के लिए अगले उदाहरण प्रेस n(के लिए पिछले N )

2
टाइप *करना गलत है। एक फ़ाइल aa aaa। खोजें /aa, आपको मिलान करना है। पहले मैच को दबाने *पर खोज शब्द बदल जाता है।
बर्नहार्ड

1
n 'अगला' नहीं है, लेकिन "अंतिम खोज दोहराएं"। इसलिए प्रवेश करते हुए; var 'var' के लिए आपकी वर्तमान स्थिति से ऊपर की ओर खोजना शुरू कर देगा। और 'एन' वास्तव में "विपरीत दिशा में अंतिम खोज को दोहराता है" इसलिए इस उदाहरण के लिए जो वर्तमान स्थिति से 'var' के लिए नीचे की ओर खोज करेगा।
रॉब वेल्स



13

जैसा कि चर्चा की गई है, खोज करने के कई तरीके हैं:

/pattern
?pattern
* (and g*, which I sometimes use in macros)
# (and g#)

प्लस, नेविगेट करने में प्रचलित / अगला Nऔर साथ में n

आप खोज प्रॉम्प्ट को खींचकर /और फिर C-p/ के साथ साइकिल चलाकर अपने खोज इतिहास को संपादित / याद कर सकते हैं C-n। इससे भी अधिक उपयोगी है q/, जो आपको एक खिड़की पर ले जाता है जहां आप खोज इतिहास नेविगेट कर सकते हैं।

इसके अलावा विचार के लिए सभी महत्वपूर्ण 'hlsearch'( :hlsसक्षम करने के लिए प्रकार ) है। यह आपके पैटर्न के कई उदाहरणों को खोजने में बहुत आसान बनाता है। तुम भी कुछ के साथ अपने मैचों को अतिरिक्त उज्ज्वल बनाना चाहते हो सकता है:

hi Search ctermfg=yellow ctermbg=red guifg=...

लेकिन फिर आप अपनी स्क्रीन पर लगातार पीले मैचों के साथ पागल हो सकते हैं। तो आप अक्सर खुद का उपयोग कर पाएंगे :noh। यह इतना सामान्य है कि एक मानचित्रण क्रम में है:

nmap <leader>z :noh<CR>

मुझे आसानी से यह याद है zक्योंकि मैं /zz<CR>अपने हाइलाइटिंग को साफ़ करने के लिए लगातार टाइप करता था (जो कि एक तेज़-से-टाइप असामान्य घटना है)। लेकिन :nohमैपिंग बेहतर है।


2
यदि आप इससे प्रेरित महसूस कर रहे हैं q/, तो आपको भी खेलना चाहिए q:। दोनों वास्तव में आसान हैं! (वास्तव में इस सवाल से संबंधित नहीं है, हालांकि।)
मीका इलियट

धन्यवाद, मीका। मैं पहले से ही 'q:' के बारे में जानता था, हालाँकि मैं इसका इतना उपयोग नहीं करता। लेकिन 'क्यू /' पूरी तरह से मेरी विम शिक्षा में छूट गया था, और मुझे लगता है कि इसका बहुत उपयोग होगा।
स्टेबलबाग

2

यदि आप "/ wordforsearch" जैसी कोई चीज़ दबाने के बाद Ctrl+ Enterदबाते हैं, तो आप मौजूदा लाइन में "wordforsearch" शब्द पा सकते हैं। फिर nअगले मैच के लिए दबाएं ; Nपिछले मैच के लिए प्रेस ।


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