Vim正则expression式反向引用
我想做这个:
%s/shop_(*)/shop_\1 wp_\1/
为什么不shop_(*)匹配任何东西?
这里有几个问题。
-
vim regexen中的parens不是为了捕获 – 你需要使用
\( \)来捕获。 -
*并不意味着你的想法。 它的意思是“0或更多的前面”,所以你的正则expression式意思是“一个string,其中包含shop_然后是0+(然后是文字)。
你在找 ,这在正则expression意思是“任何字符”。.*与星号放在一起.*表示“0或更多的任何字符”。 您可能需要至less一个字符,所以请使用.\+(+表示“以前的一个或多个”)
使用这个: %s/shop_\(.\+\)/shop_\1 wp_\1/ 。
可以在最后一个斜线后用g结束,以replace一行上的所有实例而不是第一行。
如果我理解正确,你想%s/shop_\(.*\)/shop_\1 wp_\1/
转义捕获括号并使用.*来匹配任意数量的任何字符。
(您的search正在search“shop_”,然后是任意数量的开括号,然后是右括号)