2012-04-30 74 views
2

vim中的以下問題:用vim捕獲重複的表達式

我想捕獲不同匹配組中的子模式的每個匹配。一個例子:對於行:

#abcONE# #abcTWO# 

和搜索模式

\(#abc...#\)* 

欲獲得兩組

1: #abcONE# 2: #abcTWO# 

不幸的是,我只獲得一組,至極包含最後識別的子模式,即

#abcTWO# 

你知道一個解決方案嗎?

回答

0

你會如何處理匹配的模板?替換?

/#abc...# will select both 
:%s/\v(#abc...#)/foo/g will replace both 

您的\(#abc...#\)*不起作用。因爲您的兩個「#abc ...#」之間有一個空格「#abc ...#」

1

由於您只能直接通過編號\1(而不是範圍或通配符)引用捕獲的組,因此您必須知道組的數量無論如何,事先使用。

那麼,爲什麼不展開多項目*到不同的組,所有匹配的可選\?

\(#abc...#\)\?\(#abc...#\)\?\(#abc...#\)\?\(#abc...#\)\?