2013-07-07 58 views
0

實施例:如何將搜索中的匹配添加到列表中而不用替換?

let hits = [] 

:5s/regex-search/\=join(add(hits, submatch(0)))/g 

這在管線5添加所有的匹配項的列表。

但它也是文本中的替代品。
我試圖在'g' 之後添加'n'標誌,但不會將匹配添加到列表中。

有什麼辦法可以解決我的問題嗎?

回答

4

幾乎在那裏。首先,我不認爲你需要加入。其次,添加返回添加了匹配的列表。所以你可以選擇列表的最後一個元素作爲替換元素。 (這使它看起來好像沒什麼得到更換)

s/regex-search/\=add(hits,submatch(0))[-1]/g 
+0

哇..大。謝謝。它完全符合我的需求。順便說一句,爲什麼最後一個元素不能被替換? – Reman

+0

@Remonn對不起,我不確定你的問題。 – FDinoff

+0

對不起。爲什麼列表的最後一個元素看起來像沒有被替換? – Reman

1

隨着近來足夠的Vim的版本,可以防止實際的替代確實發生(和搞亂你的撤銷分支),而右邊的表達一個:s命令的一面仍在評估中。

你至少需要Vim的補丁Vim patch 7.3.627,然後你可以簡單地使用

:s/foobar/\=add(hits, submatch(0))/gn 
相關問題