インタラクティブな:substitute(&置換を検索)を実行できますか?

:sを複雑な正規表現で使用することがありますが、これは正しい場合と正しくない場合があります。 すべての一致を置き換えたいかどうかを確認してください。

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

回答

はい!:substitutecフラグを使用してください>。: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の&incsearchset incsearch)設定は本当に便利です。便利であまり知られていないトリックと一緒に使用してください。

トリックは、/またはコマンド。Vimは&incsearch設定を使用して、一致をインタラクティブに表示します。Onc正規表現に満足している場合は、:%s//replacementを使用して、vimに前の検索を使用させることができます。

は空白です(ここにテキストを検索します)。空白のままにすると、Vimに前の検索正規表現を使用するように指示します。これにより、/を使用して複雑な正規表現を入力し、set incsearchのすべての利点を利用して、%s//replacementコマンドで実際に検索と置換を実行します。

:sコマンドのincsearchに似たものが必要な場合は、

vim-over ですが、私はネイティブのVimの方法を使用することを好みます。

コメント

  • 私はこれの変形を使用していました::%s/pattern/replace/を使用し、uを押して元に戻すだけで、Vimが変更した部分を確認できますhlsearchを有効にしている場合。また、このテキストを^Rに置き換えることができます。

回答

私のお気に入りのインタラクティブな置換は、 / を使用して search を検索し、 n 。

次に、 g を使用して選択一致します。 n 、次に s に置き換えますテキストを好きなものに置き換えます。

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

コメント

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

回答

Neovimには、

オプションを使用すると、入力中に:sコマンドの結果をプレビューできます。

回答

すべての人の利益のために、incsearchがvim8で更新され、パターンを入力したときにプレビューも表示されるようになりました

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です