VIMを使用して置き換え、検索パターンの一部を再利用します

VImを使用して、設定しようとしていますsearch and replaceコマンドを使用して、検索文字列の一部である正規表現を再利用できるいくつかの置換を実行します。

簡単な例は、から{10}、ここで10は任意の数にすることができます。

ここまで来ました

 .s/([0-9]*)/what here??/ 

必要な部分に完全に一致します。

交換を試みました

 .s/([0-9]*)/{\0}/ 

しかし、これにより、出力として{(10)}

次に、試してみました

 .s/(\zs[0-9]*\ze)/{\0}/ 

ただし、私({10})も閉じますが、必要なものではありません。

この

ですが、どこを見ればよいのかわかりません。問題は、vimでこれを実行できるかどうかです。もしそうなら、どのように?

回答

\0は完全に一致します。その一部のみを使用するには、このように設定し、\ 1

.s/(\([0-9]*\))/{\1}/ 

ここまたはvimヘルプ。

コメント

  • キャプチャの括弧はバックスラッシュでエスケープされていることに注意してください。

回答

最近、いくつかのレガシーコードを継承し、次のようなすべてのオカレンスを置き換えたいと思いました。

print "xx" print x,y print "xx" 

から

logging.info("xy") 

または

logging.info(x,y) 

前の回答に基づいて そして、誰かがそれから恩恵を受けることを期待して、私は使用しました次のコマンドを使用すると、すべてのオカレンスが変更されます。

%s/print\( .*\)/logging.info\(\1\)/g 

%をを削除して/gを削除すると、

.s/print\( .*\)/logging.info\(\1\) 

になります。調べる 一致するたびに、変更するかどうかを選択します。

回答

各一致を確認できるようにするためのより良い方法は、 1行ずつ移動するのではなく、コードの最後に「c」を追加します

%s/print\( .*\)/logging.info\(\1\)/gc 

コメント

  • これは実際には'元の質問にまったく答えません

コメントを残す

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