インタラクティブな:substitute(search&replace)を実行できますか?


17

時々:s、正しいかもしれないし、そうでないかもしれない複雑な正規表現を使用したり、すべての一致を置き換えるかどうかわからないことがあります。

実際にテキストを置き換える前に、見つかったすべての一致を確認するようにVimに指示する方法はありますか?

回答:


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ます。これにより、Vimが最下部に到達したときに最上部に折り返されなくなります。これは、フラグを使用するときに特に役立つことがわかりましたc


19

Carpetsmokerが言ったことに加えて:

Vim の&incsearchset incsearch)設定は非常に便利です。便利であまり知られていないトリックと組み合わせて使用​​できます。

トリックは、単に/or ?コマンドを使用して複雑な正規表現を試すことです。Vimはこの&incsearch設定を使用して、一致をインタラクティブに表示します。正規表現に満足したら、:%s//replacementvimに以前の検索を使用させることができます。

部分//が空白であることに注意してください(検索するテキストを入力する場所です)。空白のままにすると、Vimに以前の検索正規表現を使用するように指示します。これにより、の複雑な正規表現を入力して、の/すべての利点を得ることがset incsearchでき、%s//replacementコマンドを使用して実際に検索と置換を実行できます。

:sコマンドのincsearchに似たものが必要な場合は、vim-overをチェックしてください。ただし、ネイティブVimの方法を使用することをお勧めします。


私はこれの変種を使用していました。元に戻すために使用:%s/pattern/replace/してから押すuと、Vimがhlsearch有効になっている場合に変更された部分を見ることができます。そして、このテキストをで再度置き換えることができます^R
マーティントゥルノイ

7

私のお気に入りのインタラクティブな置換は、使用して検索/、を使用して一致を調べることnです。

そして、選択試合使用gnして、sする代わりに、私は好きなようにテキストを。

そして、次の試合に移動してを押して繰り返します.


(1)インタラクティブ、(2)誤ってスキップしてしまった場合(を使用してできないこと:s/old/new/gc)に前の試合に進むことができるため、これは非常に素晴らしいトリックです。
Ayrat


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.