Esta es la respuesta más exacta que encomtrarás compartir, sin embargo estúdiala detenidamente y analiza si se adapta a tu proyecto.
Solución:
Hay varios problemas aquí.
-
los paréntesis en vim regexen no son para capturar; debe usar
( )
para capturas. -
*
no significa lo que piensas. Significa “0 o más de los anteriores”, por lo que su expresión regular significa “un string eso contieneshop_
seguido de 0+(
y luego un literal)
.
Estas buscando.
, que en expresiones regulares significa “cualquier carácter”. Poner junto con una estrella como.*
significa “0 o más de cualquier carácter”. Probablemente quieras al menos un carácter, así que usa.+
(+
significa “1 o más de los anteriores”)
Utilizar esta: %s/shop_(.+)/shop_1 wp_1/
.
Opcionalmente termínelo con g
después de la barra inclinada final para reemplazar todas las instancias en una línea en lugar de solo la primera.
Si te entiendo bien, quieres %s/shop_(.*)/shop_1 wp_1/
Escape del paréntesis de captura y use .*
para que coincida con cualquier número de cualquier carácter.
(Su búsqueda busca “shop_” seguido de cualquier número de paréntesis de apertura seguidos de un paréntesis de cierre)