Ответ 1
Здесь несколько вопросов.
-
parens in vim regexen не предназначены для захвата - вам нужно использовать
\( \)
для захватов. -
*
не означает, что вы думаете. Это означает "0 или более предыдущих", поэтому ваше регулярное выражение означает "строка, содержащаяshop_
, за которой следует 0 +(
, а затем литерал)
.
Вы ищете.
, который в regex означает "любой символ". Сопоставим со звездой как.*
, это означает "0 или более любого символа". Вероятно, вам нужен хотя бы один символ, поэтому используйте.\+
(+
означает "1 или более предыдущего" )
Используйте это: %s/shop_\(.\+\)/shop_\1 wp_\1/
.
Опционально завершите его с помощью g
после последней косой черты, чтобы заменить все экземпляры на одной строке, а не только на первую.