Je veux faire ça:
%s/shop_(*)/shop_\1 wp_\1/
Pourquoi shop_(*)
correspond à rien?
Je veux faire ça:
%s/shop_(*)/shop_\1 wp_\1/
Pourquoi shop_(*)
correspond à rien?
Il y a plusieurs questions ici.
des parenthèses dans vim regexen ne sont pas pour la capture -- vous devez utiliser \( \)
pour les captures.
*
ne veut pas dire ce que vous en pensez. Il signifie "0 ou plus de la précédente", de sorte que votre regex signifie "une chaîne de caractères qui contient shop_
, puis 0+ (
puis un littéral )
.
Vous êtes à la recherche pour .
, ce qui en regex signifie "n'importe quel caractère". Mis en place avec une étoile comme .*
il signifie "0 ou plus de n'importe quel caractère". Vous voulez probablement au moins un caractère, utilisez donc .\+
(+
signifie "1 ou plus de la précédente")
Utilisez ceci: %s/shop_\(.\+\)/shop_\1 wp_\1/
.
Éventuellement fin il avec g
après le dernier slash pour remplacer toutes les occurrences sur une ligne plutôt que de simplement la première.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.