web-dev-qa-db-ja.com

VIMのワイルドカード文字列で検索と置換を使用することはできますか?

たとえば、次のような共通のプレフィックスとポストフィックスを持つ値の束があります。

fooVal1Bar;

fooVal2Bar;

fooVal3Bar;

この場合、すべての変数名はfooで始まり、Barで終わります。 fooBarの間にあるランダム変数名を使用して、検索と置換を使用します。既に変数Val1Val2Val3、およびVal1OldVal2Old、およびVal3Oldが定義されているとします。私は次のような線に沿って何かを見つけて交換します:

:%s/foo<AnyString>Bar/foo<AnyString>Bar = <AnyString> + <AnyString>Old

これは次の結果になります。

fooVal1Bar = Val1 + Val1Old;

fooVal2Bar = Val2 + Val2Old;

fooVal3Bar = Val3 + Val3Old;

私が何をしたいのかが明確であり、vimヘルプまたはオンラインでワイルドカード文字列に置き換えることは何も見つからなかったと思います。私が見つけた最も多くは、ワイルドカード文字列の検索についてでした。

36
dwcanillas

あなたが欲しいと思う

_:%s/foo\(\w\+\)Bar/& = \1 + \1\Old/
_

説明:

_\w\+_は、1つ以上の文字の出現を検出します。先行するfooおよび後続のBarは、これらの一致した文字がfooBarの間にあることを確認します。

\(...\)は、この文字を保存して、置換の置換部分で使用できるようにします。

_&_は一致したものをコピーします

_\1_は、\(....\)部分でキャプチャされた文字列です。

54

保存したいものをキャプチャする必要があります。次のようなものを試してください:

%s/\(foo\(\w\+\)Bar\);/\1 = \2 \2Old/

または、 magic を使用して少しクリーンアップすることもできます。

%s/\v(foo(\w+)Bar);/\1 = \2 \2Old/
4
gpojd