2013-03-27 58 views
2

我有一個CSS選擇器如:Vim的 - 在搜索捕獲字串,並且使用的更換

#page-site-index .toolbar .items { 

如何捕捉「.toolbar .items」的一部分,並用它在Vim的小號&的更換部分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的影子。

回答

9

使用\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

謝謝!我只需將(.toolbar .items)更改爲\(。\ + \),但您的答案指向了正確的方向。 – user1410363 2013-03-27 16:09:12

+1

圓括號需要反折 – Evgeny 2016-03-16 16:55:47

+0

總結: 如果你想用bar,qux,任何東西代替foobarbaz,fooquxbaz,fooanythingbaz :%s /foo\((++\)baz/\1/g – jtmarmon 2016-08-11 19:18:54

0

第一類型的:將進入命令行模式。然後發出以下命令:

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

不要在意格式,它是因爲計算器降價解析器....

+0

謝謝,但是這個文件中有很多其他的選擇器,我想用一個命令來替換它們。 – user1410363 2013-03-27 15:51:18

+0

是的,這是特定的問題。需要查看整個文件才能給出一個通用答案。 – hek2mgl 2013-03-27 15:52:19

1

在你的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 

保持GOL Fing頭,如果文字就像是你在給問題,您可以:

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

你已經通過\(...\)在您嘗試進行分組的正則表達式的有趣的部分。來指代更換部件內部這些捕獲子匹配,使用\1\2等,其中數字是指第一(打開)捕獲基團,由左到右。對於整個匹配文本,還有\0 == &。有關更多信息,請參閱:help /\1