時々:s
、正しいかもしれないし、そうでないかもしれない複雑な正規表現を使用したり、すべての一致を置き換えるかどうかわからないことがあります。
実際にテキストを置き換える前に、見つかったすべての一致を確認するようにVimに指示する方法はありますか?
時々:s
、正しいかもしれないし、そうでないかもしれない複雑な正規表現を使用したり、すべての一致を置き換えるかどうかわからないことがあります。
実際にテキストを置き換える前に、見つかったすべての一致を確認するようにVimに指示する方法はありますか?
回答:
はい!の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
。
Carpetsmokerが言ったことに加えて:
Vim の&incsearch
(set incsearch
)設定は非常に便利です。便利であまり知られていないトリックと組み合わせて使用できます。
トリックは、単に/
or ?
コマンドを使用して複雑な正規表現を試すことです。Vimはこの&incsearch
設定を使用して、一致をインタラクティブに表示します。正規表現に満足したら、:%s//replacement
vimに以前の検索を使用させることができます。
部分//
が空白であることに注意してください(検索するテキストを入力する場所です)。空白のままにすると、Vimに以前の検索正規表現を使用するように指示します。これにより、の複雑な正規表現を入力して、の/
すべての利点を得ることがset incsearch
でき、%s//replacement
コマンドを使用して実際に検索と置換を実行できます。
:s
コマンドのincsearchに似たものが必要な場合は、vim-overをチェックしてください。ただし、ネイティブVimの方法を使用することをお勧めします。
私のお気に入りのインタラクティブな置換は、を使用して検索し/、を使用して一致を調べることnです。
そして、選択試合使用gnして、sする代わりに、私は好きなようにテキストを。
そして、次の試合に移動してを押して繰り返します.
:s/old/new/gc
)に前の試合に進むことができるため、これは非常に素晴らしいトリックです。
Neovimに'inccommand'
は、:s
入力中にコマンドの結果をプレビューできるオプションもあります。
みんなの利益のために、incsearch
vim8で更新され、パターンを入力するとプレビューも表示されるようになりました
:%s/pattern/replace/
してから押すu
と、Vimがhlsearch
有効になっている場合に変更された部分を見ることができます。そして、このテキストをで再度置き換えることができます^R
。