I want to do this:
%s/shop_(*)/shop_\1 wp_\1/
Why doesn't shop_(*)
match anything?
I want to do this:
%s/shop_(*)/shop_\1 wp_\1/
Why doesn't shop_(*)
match anything?
If I understand correctly, you want %s/shop_\(.*\)/shop_\1 wp_\1/
Escape the capturing parenthesis and use .*
to match any number of any character.
(Your search is searching for "shop_" followed by any number of opening parentheses followed by a closing parenthesis)
You've made two mistakes:
This does what you want:
:%s/shop_\(.*\)/shop_\1 wp_\1/
There's several issues here. The first is that parens in vim regexen are not for capturing -- you need to use \( \)
for captures. The second is that *
doesn't mean what you think. It means "0 or more of the previous", so your regex means "a string that contains shop_
followed by 0+ (
and then a literal )
. You're looking for .
, which in regex means "any character". Put together with a star as .*
is means "0 or more of any character". You probably want at least one character, so use .\+
(+
means "1 or more of the previous")
Use this: %s/shop_\(.\+\)/shop_\1 wp_\1/
. Optionally end it with g
after the final slash to replace for all instances on one line rather than just the first.