将每次出现的10 替换为replace{index_of_match}:
:let @a=1 | %s/10/\='replace'.(@a+setreg('a',@a+1))/g
用预定义数组中的单词替换每次出现的10:
:let b = ['foo', 'bar', 'vim'] | %s/10/\=(remove(b, 0))/g
用预定义数组中的单词和匹配的索引替换每次出现的10:
:let @a=1 | let b = ['foo', 'bar', 'vim'] | %s/10/\=(b[@a-1]).(@a+setreg('a',@a+1))/g
但是由于无论如何您都必须输入任何单词,所以第二个和第三个功能的好处是微乎其微的。有关“手动”解决方案,请参阅 SpoonMeiser 的答案。
更新:如所愿,第二个例子中正则表达式部分的解释:
%= 在文档的每一行
s/<search>/<replace>/g = s 表示进行搜索和替换,g 表示替换每个出现。
\= 将以下内容解释为代码。
remove(b, 0) 删除列表 b 的索引 0 处的元素并返回它。
所以第一次出现。第二次该行将是%s/10/foo/g,列表现在只有['bar', 'vim'],所以该行将是%s/10/bar/g,依此类推
注意:这是一个快速草稿,不太可能是实现它的最佳和最干净的方法,如果有人想改进它,请随时添加评论