Vim - 在搜索上捕获字符串并在替换时使用

时间:2013-03-27 15:44:18

标签: bash search vim replace

我有一个css选择器,例如:

#page-site-index .toolbar .items {

如何捕获“.toolbar .items”部分并将其用于替换Vim S& R的部分,以便此选择器可以变为:

#page-site-index .toolbar .items, #page-site-login .toolbar .items {

类似的东西:

%s:/#page-site-index \(.toolbar .items\)/#page-site-index (the captured string), #page-site-login (the captured string)/g

顺便说一下,我正在使用Vim的终端版本。

4 个答案:

答案 0 :(得分:13)

使用\1 ...请在此处查看维基:http://vim.wikia.com/wiki/Search_and_replace

更明确地说:

%s:/#page-site-index (.toolbar .items)/#page-site-index \1, #page-site-login \1/g

答案 1 :(得分:2)

在你的vim中尝试这个命令:

%s/\v#(page-site-index )(\.toolbar \.items)/&, #page-site-login \2/g

你也可以使用\zs, \ze而无需分组:

%s/#page-site-index \zs\.toolbar \.items\ze/&, #page-site-login &/g

保持打高尔夫球,如果文字就像你提出的那样,你可以:

%s/#page-site-index \zs[^{]*\ze /&, #page-site-login &/g

答案 2 :(得分:2)

您已经尝试通过\(...\)将正则表达式的有趣部分分组。要在替换部件中引用这些捕获的子匹配,请使用\1\2等,其中数字指的是第一个(打开的)捕获组,从左到右对。对于整个匹配的文本,还有\0 == &。有关详细信息,请参阅:help /\1

答案 3 :(得分:0)

首先输入:进入命令模式。然后发出以下命令:

%s/#page-site-index .toolbar .items/#page-site-index .toolbar, #page-site-login
.toolbar .items/

不关心格式化,因为stackoverflow markdown解析器......