Vimの対話型検索/正規表現を置き換えますか?


265

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

     %s/old/new/g

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

回答:


462

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

:%s/old/new/gc

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

「古い」はテキストで強調表示されています。 ウィンドウの下部に「新しい(y / n / a / q / l / ^ E / ^ y)に置き換えますか?」と表示されます。

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

:h :s

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

「[C]各置換を確認します。[...] CTRL-Yで画面を下にスクロールします」というテキスト

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


30
+1、今日新しいことを学びました!vimのは、非常に多くの隠された秘密を持っている... :)
マルク・Novakowski

10
vimコマンドの学習は、Nethackをプレイするのと少し似ています。1人のキャラクターが何を保持するのか不思議に思うことはありません。
Mark Biek、2009

22
「c」は「確認」のためのものだと
思います

8
私は正直言って、ぎこちない話をしているわけではありませんが、「:help:s」を実行すると、「:help:s_flags」に直接アクセスできます。
Jeremy Cantrell、

13
@jeremy:ヘルプコマンドが存在すること、および関連するヘルプファイルにアクセスするには「コロンs」スイッチを入力する必要があることを知る必要があります。どのように、またはどこでそれを学ぶでしょうか?
デニス14

79

Mark Biekは次のように指摘しました:

%s/old/new/gc

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

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

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


9
vimを使用/学習することの最大の利点の1つは、ウサギの穴がどれだけ深くなるかです。
ケン

2
いいですね、いつも検索を行っていて、<Cr> /を使用して最後の検索を代替コマンドに貼り付けました。
Atilla Filiz 14

Sublime Textで私が見逃しているのはまさにその通りです!
Xenofex 2016

この答えは特に便利です。私は、単語のインスタンスを置き換えることを決定することが多いと思いますが、これは検索した単語です。
M_M

20

私はあなたが探していると思いますc、例えばs/abc/123/gc、これはVIMが交換を確認する原因となります。詳細は:help:substituteを参照してください。


9

私は通常、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代わりに、もう一度押すだけで次.の置換を見つけることができます)。


私はこれも同様のテキストに使用します。(3cW <texthere> <ESC> <move to new location>。<move>。<move>。)
strager

1
それはアンチパターンではありません!それは甘い。そして、Nを使用して反対方向に検索できます。単語を見つけて変更したい場合は、本当に良い方法です。* cwNewText <ESC> NNN(これは、カーソルの下の単語から離れてジャンプするが、その後、あなたは次の出現変わってきたようにすぐに戻ってジャンプします。
PEZ

なに<CR>
ソザー2017年

9

「abc」の出現回数を数えたいだけなら、そうすることができます%s/abc//gn。これは何も置き換えず、 'abc'の発生数を報告するだけです。


3

一致する出現ごとに置換テキストを変更する必要がある場合(つまり、単一の置換を適用するために単に「はい/いいえ」を選択するのではない場合)、私が作成したVimプラグインInteractive-replaceを使用できます。


2

Neovimには、置換をプレビューする機能があります。

ここに画像の説明を入力してください

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


これはnvim組み込み機能のように格好良いので、知っておくと便利です。共有してくれてありがとう!
LeOn-Han Li
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.