置換コマンドのプレビューを取得するにはどうすればよいですか?


9

かなりの頻度で、大きなファイル全体で一致がまばらになり、自明ではない検索式と置換式を使用する置換を実行する必要があることに気付きます。

たとえば、のような関数呼び出しがあるとしokFunction(arg1, arg2 arg3)ます。もちろん、引数は関数呼び出しごとに異なります。今、私は必要としないより良い機能を発見したと言いますarg2。ファイル全体を簡単に調整できます

:%s/\<okFunction(\(\w\+\), \(\w\+\), \(\w\+\))/betterFunction(\1, \3)/gc

概念的には単純ですが、このかなり長いパターンで構文が正しいかどうかはわかりません。cフラグは本当にここに役立ちますが、問題は、確認を求めたとき、Vimはマッチが置き換えられますどのような表示されませんということです。つまり、置換式は表示されますが、評価結果は表示されません。で置換を確認するとy、vimはすぐに次の試合にジャンプし、間違いを犯したかどうかを確認することはできません。

問題を部分的に解決するvim-overプラグインを見つけましたが、コマンドを入力しているときに画面にすべてのマッチが表示されている場合のみです。Enterキーを押すと、動作は上記の説明とまったく同じになり、プレビューは表示されません。

それで、代替コマンドで確認を求めるときにvimに置換式を評価させる方法はありますか?


2
これは、vim-bugトラッカーのwhishlistアイテムです(現時点では見つかりません)
Christian Brabandt

2
通常、最初の行の置換を使用して置換せずに置換する価値があるものについて%は、結果が期待どおりであることを確認してから、置換を使用します%(数回のキーストロークのみです:) :<up><c-b>%。明らかにプレビューオプションはそれよりもはるかに効率的です。利用可能なパッチはありませんが、この種のオプションを使用してvimscript関数で置換をラップすることはできますが、それは多くの作業のように
思われ

2
@ChristianBrabandt それを見つけた。それは今のところ未分類の優先順位です...
Vitor Eiji

2
@VitorEijiそれは私が考えていたものではありませんでした。しかし、それは現在可能ではないので、実際には問題ではありません。Neovimは 'inccommand'オプションを提供します。これは機能する可能性があります(または、実際には機能しません)
Christian Brabandt

Evilが代替をプレビューします。しかし、それがどのように行われるのかはわかりません。
Geremia

回答:


2

回避策の1つはマクロです。問題のある領域をすべて強調表示し、一度に1行ずつ置き換えます。次に、それが必要かどうかを決定します。n次のエリアに行ったら。

具体的には次のとおりです。

  1. エリアを検索: /\<okFunction(\(\w\+\), \(\w\+\), \(\w\+\))
  2. マクロの記録を開始しqqます。
  3. 申し込む :s/\<okFunction(\(\w\+\), \(\w\+\), \(\w\+\))/betterFunction(\1, \3)/g
  4. マクロの記録を停止 q
  5. 元に戻す(u)または次の検索結果に移動(n)します。
  6. マクロを適用し@qます。
  7. 必要に応じて手順5と6を繰り返します。

明らかに、あなたが探していたものとはまったく異なりますが、これは通常私がすることです。


カッコいい!あなたが/それを使って検索を行うと、視覚的な選択としても動作することに気づきませんでした。
the_velour_fog 16

@the_velour_fog " /...視覚的な選択として動作します。" 実際にはそうではありません。これが機能する理由は:s//、現在の行で動作し、使用nすると次の発生に移動するためです。
Tumbler41 '19 / 12/16

1
パターンを指定しない場合:s/pattern/replacementは、最後の検索文字列が使用されるため、ステップ3で実際に:s//betterFunction(\1, \3)/g入力して入力を節約できます。
Haegin 16

@ Tumbler41ああ、明確にしてくれてありがとう。はい、私もこの基本的な検索手法を実行しから、マクロ適用します。通常、最初にarglistに入力してからマクロ:vimgrep /pattern/ ##適用します。これにより、パターンが実際に一貫して一致し、マクロの処理が面倒であることが判明した場合、すぐに行うことができます。:argdo %s/.../..../gcオペレーションに戻り、飛行を開始します
the_velour_fog 2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.