:s
を複雑な正規表現で使用することがありますが、これは正しい場合と正しくない場合があります。 すべての一致を置き換えたいかどうかを確認してください。
実際にテキストを置き換える前に、見つかったすべての一致を確認するようにVimに指示する方法はありますか?
回答
はい!:substitute
divにはc
フラグを使用してください>。: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/gc
これは非常に便利ですが、2週間前までこれについて知りませんでした:-)そしてそれは「ol」viでも利用可能です:-)
ボーナスのヒント::set nowrapscan
を使用することもできます。これにより、Vimが下部に当たったときに上部に折り返されるのを防ぎます。 c
フラグを使用するときに特に便利であることがわかりました。
コメント
-
old
のすべてのインスタンスを(最初の出現だけでなく)同じ行に置き換える場合は、があるので、合計で%s/old/new/gc
- ああ、そうです。なので、例@ e271p314に追加するのを忘れがちです😅
回答
Carpetsmokerが言ったことに加えて:
Vimの&incsearch
(set incsearch
)設定は本当に便利です。便利であまり知られていないトリックと一緒に使用してください。
トリックは、/
またはコマンド。Vimは&incsearch
設定を使用して、一致をインタラクティブに表示します。Onc正規表現に満足している場合は、:%s//replacement
を使用して、vimに前の検索を使用させることができます。
は空白です(ここにテキストを検索します)。空白のままにすると、Vimに前の検索正規表現を使用するように指示します。これにより、/
を使用して複雑な正規表現を入力し、set incsearch
のすべての利点を利用して、%s//replacement
コマンドで実際に検索と置換を実行します。
:s
コマンドのincsearchに似たものが必要な場合は、
vim-over ですが、私はネイティブのVimの方法を使用することを好みます。
コメント
回答
私のお気に入りのインタラクティブな置換は、 / を使用して search を検索し、 n 。
次に、 g を使用して選択一致します。 n 、次に s をに置き換えますテキストを好きなものに置き換えます。
そして次の試合に移動してを押してを繰り返します。
コメント
- これは非常に優れたトリックです。(1)インタラクティブ、(2)誤ってスキップした場合に前の試合に進むことができるからです。それ(
:s/old/new/gc
を使用して実行できないこと)。
回答
オプションを使用すると、入力中に:s
コマンドの結果をプレビューできます。
回答
すべての人の利益のために、incsearch
がvim8で更新され、パターンを入力したときにプレビューも表示されるようになりました
:%s/pattern/replace/
を使用し、u
を押して元に戻すだけで、Vimが変更した部分を確認できますhlsearch
を有効にしている場合。また、このテキストを^R
に置き換えることができます。