शब्द के अगले घटना के लिए कूदो मैं अभी बदला है


12

अगर मेरे पास निम्नलिखित हैं:

function foo(bar) {
    return bar + 1;
}

और मैं का उपयोग cwपहले बदलने के लिए barकरने के लिए baz, मैं कैसे मेल खाने वाले अगले करने के लिए कूद करते bar, ताकि मैं उपयोग कर सकते हैं .यही बदलाव अवश्य करें?

मैं उपयोग नहीं कर सकता *, क्योंकि यह कर्सर के तहत वर्तमान शब्द के लिए खोज करता है, और मैं मूर्खतापूर्ण तरीके barसे पहली बार खोज नहीं करता था, इसलिए nकाम नहीं करेगा।

क्या शब्द की अगली घटना के लिए खोज करने का एक सरल तरीका है जैसा कि मैंने इसे बदलने से पहले किया था ?

मैं एक खोज और प्रतिस्थापित नहीं करना चाहता, क्योंकि या तो barमेरी फ़ाइल में अन्य घटनाएँ हैं जिन्हें मैं बदलना नहीं चाहता, या क्योंकि वहाँ केवल दो उदाहरण थे bar, और :%s/bar/baz/मैं शुरू होने से पहले भूल गया और यह भी है केवल शेष उदाहरण को बदलने के लिए बहुत प्रयास।


2
यह आपके द्वारा बताए गए वर्कफ़्लो का पूरी तरह से पालन नहीं करता है, लेकिन विम-तिरछा* खोज को बेहतर बनाता है । विशेष रूप से यह *आपके कर्सर को स्थानांतरित किए बिना वर्तमान शब्द का नेत्रहीन चयन करता है। एक बार यह स्थापित हो जाने पर आप *ciwपुराने शब्द को खोज रजिस्टर में डाल सकते हैं और शब्द को बदल सकते हैं। तो फिर तुम उपयोग कर सकते हैं nऔर .
statox

एन दबाने से आप पिछले खोजे गए पैटर्न की अगली घटना पर पहुँच जाएंगे। आपने ऐसा क्यों नहीं किया?
सिबिओडर

... क्योंकि मैंने पहली घटना के लिए खोज नहीं की थी, इसलिए nकाम नहीं करेगा।
रोजर लिप्सकॉम्ब

जवाबों:


14

आपके द्वारा अभी-अभी परिवर्तित किए गए पाठ cwको अनाम रजिस्टर में काट दिया गया था ताकि आप इसे पुन: उपयोग कर सकें:

/<C-r>"<CR>

अपने अंतिम परिवर्तन द्वारा कवर किए गए पाठ की अगली घटना पर जाने के लिए।


5

पूरी तरह से वर्कफ़्लो के रूप में रोमैनेल का विस्तार करने के लिए ...

यदि आप इस प्रकार का संपादन करने में अधिक हैं और तब आपको यह एहसास होता है कि एक पैराग्राफ / फंक्शन पर एक ही संपादन लागू करने के लिए आपको "और .रजिस्टरों का उपयोग कर सकते हैं ।

अपने उदाहरण में आप तर्क का प्रारंभिक संपादन कर सकते हैं। यदि आप दृश्य मोड में प्रवेश करते हैं (मैं दृश्य रेखा का उपयोग सिर्फ यह सुनिश्चित करने के लिए करूंगा कि आप सब कुछ सही ढंग से चुनें) और फिर एक खोज और प्रतिस्थापित करें।

V]] - पैराग्राफ / फ़ंक्शन के अंत के लिए विज़ुअल लाइन।

  • : - जब से आप दृश्य मोड में हैं यह बन जाता है :'<,'>
  • s/ - खोजें
  • CTRL+ "- अंतिम यान / आइटम हटाएं (उदाहरण में बार)
  • / - और बदलें
  • CTRL+ .- अंतिम इंसर्ट (उदाहरण में बाज)

इस पैटर्न का उपयोग करने के बाद से आपको उपयोग करने के लिए थोड़ा समय लगता है। अधिकांश समय आप केवल खोज को लागू करना चाहते हैं और पूरे फ़ंक्शन को तर्क सहित प्रतिस्थापित कर सकते हैं, लेकिन इसका एक अच्छा तरीका यह है कि विरोधी पैटर्न न करें "काम करो, एहसास करो कि आपको इसे बेहतर, पूर्ववत और फिर से करना चाहिए। सही ढंग से। "


2

यदि आप एक अलग संयोजन को दबाने का बुरा नहीं cwमानते हैं, तो मेरा मानना ​​है कि आप एक शॉर्टकट को परिभाषित करके आसानी से जो चाहें प्राप्त कर सकते हैं। आप जो कर सकते हैं, वह निम्नलिखित है

nmap <leader>a "1yiw:let @/=@1^Mciw

आपकी .vimrcफ़ाइल में। ध्यान दें कि ^M वापस कुंजी का एक पर कब्जा है, और नहीं वर्ण ^और M। आपको इसे इसके बाद इन्सर्ट मोड में Ctrl+ दबाकर प्राप्त करें । अब, इस परिभाषित के साथ, दबाने के समान ही होगा , लेकिन अब शब्द (परिवर्तन से पहले) आपके "अंतिम खोज रजिस्टर" में होगा (अर्थात, रजिस्टर), इसलिए आपके द्वारा परिवर्तन किए जाने के बाद दबाने और वापस करने पर सामान्य मोड में आपको अगली घटना के लिए मिलेगा। इसी तरह, दबाने से आपको पिछली घटना मिल जाएगी।VEnter<leader>acw/nN

जिस शॉर्टकट को आप निश्चित रूप से अलग शॉर्टकट का चयन कर सकते हैं <leader>a, लेकिन मुझे लगता है कि यह एक बहुत ही सुलभ शॉर्टकट है। व्यक्तिगत रूप से मैंने इसे निर्धारित <leader>किया ,है कि मुझे बस ,इसके बाद प्रेस करने की आवश्यकता है a, लेकिन इसका कारण यह है कि मैं एक अमेरिकी कीबोर्ड का उपयोग नहीं करता हूं, ताकि मेरा \कुछ दूर छिपा हो (मुझे विश्वास \है कि डिफ़ॉल्ट है <leader>)।

स्पष्टीकरण विचार वास्तव में सरल है। खोज रजिस्टर में कर्सर के नीचे शब्द को डुबोएं /और फिर करें cw। इस प्रकार nmap <leader>a "/yciwमैं जो लक्ष्य कर रहा था, लेकिन दुर्भाग्य से मुझे नहीं लगता है कि आप खोज रजिस्टर में जा सकते हैं, इसलिए वर्कअराउंड शब्द को कर्सर के नीचे 1रजिस्टर में जमा करना है, फिर रजिस्टर को उसके /बराबर सेट करें , और फिर करें cw। तो "1yiwवह हिस्सा है जो कर्सर के नीचे आंतरिक शब्द को रजिस्टर में जमा करता है 1। यदि आप आंतरिक शब्दों के बारे में नहीं जानते हैं, तो आप देख सकते हैं :help iw। बाद में, :let @/=@1के कब्जा से इस प्रकार Enterकहते हैं की सामग्री 1रजिस्टर में /। इस बिंदु पर nऔरNकर्सर के नीचे शब्द की अगली और पिछली घटना के रूप में काम करता है, और फिर ciwऐसा किया जाता है ताकि क्यूरर के तहत शब्द हटा दिया जाए और विम को सम्मिलित मोड में डाल दिया जाए।

शब्द बनाम आंतरिक शब्द मुझे बस एहसास हुआ कि मैंने मान लिया था कि आप पूरे शब्द को क्यूरर के तहत चाहते थे , न कि केवल क्यूरर के बिंदु से और पर। यही कारण है कि मैं हर जगह के iwबजाय इस्तेमाल किया w। यदि यह मामला नहीं है, तो आपको उपयोग करना चाहिए

nmap <leader>a "1yw:let @/=@1^Mcw

बजाय। यदि कर्सर शब्द के पहले अक्षर पर है, तो कोई अंतर नहीं है।

अस्वीकरण यह समाधान शायद अच्छी तरह से काम नहीं करेगा अगर आप एक पर कर्सर खड़े होने से, कुछ है कि पत्र से सामान अलग होता है पर इसका इस्तेमाल करने उदाहरण के लिए कोशिश \या की जगह iwसे iW, ib, isया ipया कुछ और है (हालांकि मैं पता नहीं क्यों तुम करोगी इस सुविधा को पूरे वाक्यों के साथ चाहते हैं)

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