42

たとえば、次のような共通の接頭辞と接尾辞を持つ一連の値があります。

fooVal1Bar;

fooVal2Bar;

fooVal3Bar;

この場合、すべての変数名は で始まり、 で終わり、fooで終わりBarます。fooと の間にある確率変数名を使用して、検索と置換を使用したいと考えていますBarVal1Val2Val3、およびVal1OldVal2Old、およびVal3Old定義済みの変数が既にあるとします。次の行に沿って、置換を見つけます。

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

これにより、次のようになります。

fooVal1Bar = Val1 + Val1Old;

fooVal2Bar = Val2 + Val2Old;

fooVal3Bar = Val3 + Val3Old;

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

4

3 に答える 3

64

私はあなたが欲しいと信じています

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

説明:

\w\+キャラクターの1つ以上のオカレンスを検索します。前のfooと次のBarは、これらの一致する文字がafooとaの間にあることを確認しBarます。

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

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

\1パーツにキャプチャされた文字列\(....\)です。

于 2012-04-26T15:32:14.060 に答える
7

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

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

または、魔法で少しきれいにすることもできます:

%s/\v(foo(\w+)Bar);/\1 = \2 \2Old/
于 2012-04-26T15:34:57.200 に答える