如何在不进行替换的情况下将搜索中的匹配项添加到列表中?

时间:2013-07-07 17:04:18

标签: list search vim match

示例:

let hits = [] 

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

这将第5行中的所有匹配添加到列表中。

然而,它也是文本中的替代品 我尝试在“n”之后添加“g”标记 但是这不会将匹配项添加到列表中。

有什么方法可以解决我的问题吗?

2 个答案:

答案 0 :(得分:4)

几乎就在那里。首先,我认为你不需要加入。其次,添加返回列表并添加匹配。因此,您只需选择列表的最后一个元素作为替换元素即可。 (这使得它似乎没有被替换)

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

答案 1 :(得分:1)

使用最近的Vim版本,你可以防止实际的替换发生(并且弄乱你的undo分支),而仍然正在评估:s命令右侧的表达式。

您至少需要Vim补丁Vim patch 7.3.627然后才能使用

:s/foobar/\=add(hits, submatch(0))/gn