たとえば、次のような共通のプレフィックスとポストフィックスを持つ値の束があります。
fooVal1Bar;
fooVal2Bar;
fooVal3Bar;
この場合、すべての変数名はfoo
で始まり、Bar
で終わります。 foo
とBar
の間にあるランダム変数名を使用して、検索と置換を使用します。既に変数Val1
、Val2
、Val3
、およびVal1Old
、Val2Old
、およびVal3Old
が定義されているとします。私は次のような線に沿って何かを見つけて交換します:
:%s/foo<AnyString>Bar/foo<AnyString>Bar = <AnyString> + <AnyString>Old
これは次の結果になります。
fooVal1Bar = Val1 + Val1Old;
fooVal2Bar = Val2 + Val2Old;
fooVal3Bar = Val3 + Val3Old;
私が何をしたいのかが明確であり、vimヘルプまたはオンラインでワイルドカード文字列に置き換えることは何も見つからなかったと思います。私が見つけた最も多くは、ワイルドカード文字列の検索についてでした。
あなたが欲しいと思う
_:%s/foo\(\w\+\)Bar/& = \1 + \1\Old/
_
説明:
_\w\+
_は、1つ以上の文字の出現を検出します。先行するfooおよび後続のBarは、これらの一致した文字がfoo
とBar
の間にあることを確認します。
\(...\)
は、この文字を保存して、置換の置換部分で使用できるようにします。
_&
_は一致したものをコピーします
_\1
_は、\(....\)
部分でキャプチャされた文字列です。
保存したいものをキャプチャする必要があります。次のようなものを試してください:
%s/\(foo\(\w\+\)Bar\);/\1 = \2 \2Old/
または、 magic を使用して少しクリーンアップすることもできます。
%s/\v(foo(\w+)Bar);/\1 = \2 \2Old/