क्या मैं एक इंटरैक्टिव कर सकता हूं: स्थानापन्न (खोज और प्रतिस्थापित)?


17

कभी-कभी मैं :sएक जटिल regexp के साथ उपयोग करता हूं जो सही हो सकता है या नहीं हो सकता है, या सुनिश्चित नहीं है कि मैं सभी मैचों को बदलना चाहता हूं ।

क्या ऐसा कोई तरीका है जिससे मैं विम को बता सकता हूं कि वह हर मैच की पुष्टि करता है, इससे पहले कि वह वास्तव में टेक्स्ट को बदल दे?

जवाबों:


20

हाँ! के लिए cध्वज का उपयोग करें :substitute। से :help substitute:

[c]     Confirm each substitution.  Vim highlights the matching string (with
        hl-IncSearch).  You can type:                           :s_c
            'y'     to substitute this match
            'l'     to substitute this match and then quit ("last")
            'n'     to skip this match
            <Esc>   to quit substituting
            'a'     to substitute this and all remaining matches {not in Vi}
            'q'     to quit substituting {not in Vi}
            CTRL-E  to scroll the screen up {not in Vi, not available when
                        compiled without the +insert_expand feature}
            CTRL-Y  to scroll the screen down {not in Vi, not available when
                        compiled without the +insert_expand feature}

उदाहरण उपयोग पाई के रूप में सरल है:

%s/old/new/c

यह बहुत उपयोगी है, लेकिन 2 सप्ताह पहले तक इस बारे में पता नहीं था :-) और यह ol 'vi :-) में भी उपलब्ध है

बोनस टिप: आप उपयोग करना भी चाह सकते हैं :set nowrapscan; जब यह नीचे से टकराता है तो विम को ऊपर से लपेटने से रोकता है। मैंने ध्वज का उपयोग करते समय इसे विशेष रूप से उपयोगी पाया है c


19

Carpetsmoker ने क्या कहा इसके अलावा:

&incsearch( set incsearch) विम में सेटिंग वास्तव में उपयोगी है। आप इसे एक उपयोगी और कम ज्ञात चाल के साथ उपयोग कर सकते हैं।

चाल सिर्फ /या ?आदेश का उपयोग करके अपने जटिल regex बाहर की कोशिश करने के लिए है । Vim &incsearchसेटिंग का उपयोग अंतःक्रियात्मक रूप से मैच दिखाने के लिए करेगा । एक बार जब आप रेगेक्स से खुश हो जाते हैं, तो आप :%s//replacementपिछले खोज का उपयोग करने के लिए उपयोग कर सकते हैं ।

ध्यान दें कि कैसे हिस्सा //खाली है (यह वह जगह है जहाँ आपने पाठ को खोज के लिए रखा है)। यदि आप इसे खाली छोड़ देते हैं, तो आप पिछले खोज regex का उपयोग करने के लिए विम को बता रहे हैं। इसके साथ, आप एक जटिल रेगेक्स टाइप कर सकते हैं /और इसके सभी फायदे हैं set incsearch, और फिर %s//replacementकमांड का उपयोग वास्तव में खोज और प्रतिस्थापन को निष्पादित करने के लिए कर सकते हैं।

यदि आप :sकमांड्स के लिए इन्कॉस्क्रिप्शन के समान कुछ चाहते हैं , तो vim-over की जांच करें , लेकिन मैं सिर्फ देशी Vim तरीके का उपयोग करना पसंद करता हूं।


मैंने इसका एक वेरिएंट उपयोग किया है: बस उपयोग करें :%s/pattern/replace/और फिर uपूर्ववत करने के लिए दबाएं , आप उन हिस्सों को देख सकते हैं जिन्हें विम ने बदल दिया है यदि आपने hlsearchसक्षम किया है। और आप इस पाठ को फिर से बदल सकते हैं ^R
मार्टिन टूरनोइज

7

मेरा पसंदीदा इंटरएक्टिव प्रतिस्थापन है खोज का उपयोग करना /और उपयोग किए गए मैचों के माध्यम से जाना n

फिर मैच का उपयोग करके चयन करेंgn और फिर मुझे जो भी पसंद है उसके साथ पाठ sको स्थानापन्न करें।

और अगले मैच में जाने और दबाने से दोहराएं.


यह एक बहुत अच्छी चाल है, क्योंकि यह है: (1) इंटरैक्टिव, (2) आप पिछले मैच में जा सकते हैं यदि आपने गलती से इसे छोड़ दिया है (ऐसा कुछ जो आप उपयोग नहीं कर सकते हैं :s/old/new/gc)।
अरिअत

3

नियोविम में भी 'inccommand'विकल्प है जो :sआपको टाइप करते समय कमांड के परिणाम का पूर्वावलोकन करने देता है।


1

सभी के लाभ के लिए, incsearchvim8 में अपडेट किया गया था ताकि आप पैटर्न टाइप करते समय पूर्वावलोकन भी दिखा सकें

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