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

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

私は、VIm検索文字列の一部である正規表現を再利用して置換を行うための検索および置換コマンドを設定しようとしています。

(10)簡単な例としては、を に置き換えたい行があります{10}。ここで、 10 は任意の数字です。

ここまで来た

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

それはまさに私が欲しい部分と一致します。

さて、交換品ですが、試してみました

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

しかし、これは出力として{(10)}

そして、私は試しました

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

しかし、その結果は で({10})、これも閉じましたが、私が望んでいるものではありません。

これの代わりに、他の種類のマーキング/バック参照が必要だと思います\0が、どこを調べればよいかわかりません。そこで質問ですが、これは vim で実行できますか? できるとしたら、どのように実行できますか?

答え1

\0は一致全体です。その一部だけを使用するには、このように設定して\1を使用する必要があります。

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

より詳しい説明はここまたは vim ヘルプで。

答え2

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

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\)

これにより、各一致を確認して、変更するかどうかを選択できるようになります。

答え3

各一致を確認するには、行ごとに確認するのではなく、コードの最後に「c」を追加するのがよいでしょう。

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

関連情報