Par exemple, j'ai un tas de valeurs avec un préfixe et un suffixe communs, tels que:
fooVal1Bar;
fooVal2Bar;
fooVal3Bar;
Dans ce cas, tous les noms de variables commencent et se terminent par foo
et se terminent par Bar
. Je veux utiliser une recherche et remplacer en utilisant les noms de variables aléatoires trouvés entre foo
et Bar
. Disons que j'ai déjà des variables Val1
, Val2
, Val3
, et Val1Old
, Val2Old
, et Val3Old
Défini. Je ferais une recherche de remplacement, quelque chose comme:
:%s/foo<AnyString>Bar/foo<AnyString>Bar = <AnyString> + <AnyString>Old
Il en résulterait:
fooVal1Bar = Val1 + Val1Old;
fooVal2Bar = Val2 + Val2Old;
fooVal3Bar = Val3 + Val3Old;
J'espère que ce que je veux faire est clair, je n'ai rien trouvé dans l'aide de vim ou en ligne sur le remplacement par des chaînes génériques. Le maximum que j'ai pu trouver concernait la recherche de chaînes génériques.
Je crois que tu veux
:%s/foo\(\w\+\)Bar/& = \1 + \1\Old/
explication:
\w\+
Trouve une ou plusieurs occurrences d'un personnage. Les précurseurs foo et suivants Bar garantissent que ces caractères correspondants sont juste entre un foo
et un Bar
.
\(...\)
stocke ces caractères afin qu'ils puissent être utilisés dans la partie remplacer de la substitution.
&
Copie ce qui a été trouvé
\1
Est la chaîne capturée dans la partie \(....\)
.
Vous devez capturer ce que vous souhaitez enregistrer. Essayez quelque chose comme ceci:
%s/\(foo\(\w\+\)Bar\);/\1 = \2 \2Old/
Ou vous pouvez le nettoyer un peu avec magie :
%s/\v(foo(\w+)Bar);/\1 = \2 \2Old/