web-dev-qa-db-ja.com

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

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

簡単な例は、_(10)_を_{10}_に置き換えたい行です。ここで、10は任意の数値です。

ここまで来た

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

私が欲しい部分と正確に一致します。

さて、交換してみました

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

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

次に、試しました

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

ただし、これにより_({10})_が得られましたが、これも閉じるが、必要なものではありません。

私はこの_\0_の代わりに他の種類のマーキング/後方参照が必要だと思いますが、どこを見ればよいのかわかりません。それで問題は、これはvimで行うことができますか?

33
Bernhard

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

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

より詳細な説明は here またはvimヘルプにあります。

47
rush

各一致を確認できるようにするためのより良い方法は、行ごとではなく、コードの最後に「c」を追加することです。

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

私は最近、いくつかのレガシーコードを継承しました。

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
yagad