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


29

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

簡単な例では、私が交換したい行になる(10)まで{10}10は任意の数とすることができます。

ここまで来ました

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

私が望む部分と正確に一致します。

今、交換、私は試しました

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

しかし、これは出力として与えます {(10)}

その後、私は試しました

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

しかし、それは私({10})にを与え、私もそれを閉じましたが、私が望むものではありませんでした。

これの代わりに他の種類のマーキング/逆参照が必要だと思います\0が、どこを見るべきかわかりません。質問は、これをvimで行うことができますか?

回答:


37

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

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

より詳細な手順については、こちらまたはvimヘルプをご覧ください


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

0

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

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

これにより、各マッチを確認し、変更するかどうかを選択できます。


0

各一致を確認できるようにするより良い方法は、行ごとに移動するのではなく、コードの末尾に「c」を追加することです

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

これは本当にどのような方法で、元の質問に答えていない
ベルンハルト
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.