替换每个出现的
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 / / / g = s表示执行搜索和替换,g表示替换每个出现。
\ =将以下内容解释为代码。
remove(b,0)从列表b中删除并返回索引0处的元素。
所以对于第一次出现。行将是%s / 10 / foo / g第二次,列表现在仅为['bar','vim'],因此行将是%s / 10 / bar / g依此类推
注意:这是一个快速草稿,可能不是实现它的最佳和最清洁的方法,如果有人想改进它,请随意添加评论