web-dev-qa-db-ja.com

Vimでのインタラクティブな検索/置換正規表現

グローバル置換を行うための正規表現を知っています。

     %s/old/new/g

Vim でインタラクティブな検索置換を実行するにはどうすればよいですか?

250
kal

フラグcを追加します(vimコマンドプロンプトで):

:%s/old/new/gc

'old'が現れるたびにyes/noプロンプトが表示されます。

"old" is highlighted in the text; at the bottom of the window it says "replace with new (y/n/a/q/l/^E/^y)?)"

Vimの組み込みヘルプは、確認による置換が選択されると利用可能なオプションに関する有用な情報を提供します。つかいます:

:h :s

次に、オプションの確認に関するセクションまでスクロールします。下のスクリーンショット:

Text that says "[C] Confirm each substitution. [...] CTRL-Y to scroll the screen down"

たとえば、これと残りのすべての一致を置き換えるには、aを使用します。

435
Mark Biek

マーク・ビークは以下を使用して指摘しました:

%s/old/new/gc

グローバル検索の場合、各置換の確認に置き換えます。しかし、古いテキストが正しく一致することをインタラクティブに確認することも楽しんでいます。最初に正規表現を使用して検索し、次にそのパターンを再利用します。

/old.pattern.to.match
%s//replacement/gc

s//は最後の検索パターンを使用します。

75
Vincent Scheib

c、たとえばs/abc/123/gcを探していると思います。これにより、VIMが置換を確認します。詳細については、:help:substituteを参照してください。

19
Logan Capaldo

私は通常find/substitute/next/repeatコマンドを使用します:-)

/old<CR>3snew<ESC>n.n.n.n.n.n.n.

それはfind "old"substitute 3 characters for "new"find nextrepeat substituteなどです。

大規模な置換の場合は苦痛ですが、古い置換を選択的に無視することができます(置換を繰り返すために.の代わりにnをもう一度押して次のものを見つけるだけです)。

9
paxdiablo

'abc'の出現回数をカウントするだけの場合は、%s/abc//gnを実行できます。これは何も置き換えませんが、「abc」の出現回数を報告するだけです。

9
Amjith

置換テキストで、一致する各出現に対してchangeが必要な場合(つまり、単純な置換を適用するためにYes/Noを選択するだけではない場合)、Vimプラグインを使用できます interactive-replace と呼ばれます。

3
hwrod

Neovim に置換をプレビューする機能が追加されました:

enter image description here

https://medium.com/@eric.burel/stop-using-open-source-5cb19baca44d 機能のドキュメント: https://neovim.io/ doc/user/options.html# 'inccommand'

0
sumek