替换每个出现的10
with 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)
删除列表索引 0 处的元素b
并返回它。
所以对于第一次出现。该线将是%s/10/foo/g
第二次,现在只剩下名单了['bar', 'vim']
所以这条线将是%s/10/bar/g
等等
注意:这是一个快速草稿,不太可能是实现它的最佳和最干净的方法,如果有人想改进它,请随时添加评论