例如,我有一个文本, 10 3 4 2 10,如图4所示,10 ....如何在VI/VIM编辑器中用每种情况下不同的发现词替换?
没有我想用不同的话
我知道%S/10 /替换来改变各10 -words/gc但它只让我替换为yes/no的交互方式,但我想用replace1,3,4,2,replace2,4,replace3等不同的词来更改每个出现的10个字符....
例如,我有一个文本, 10 3 4 2 10,如图4所示,10 ....如何在VI/VIM编辑器中用每种情况下不同的发现词替换?
没有我想用不同的话
我知道%S/10 /替换来改变各10 -words/gc但它只让我替换为yes/no的交互方式,但我想用replace1,3,4,2,replace2,4,replace3等不同的词来更改每个出现的10个字符....
替换每个出现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
等
注:这是一个快速草稿,不可能达到它的最佳&干净的方法,如果有人想要改进它,请随时添加评论
是否存在您想要的单词的模式,或者您希望在每次出现要替换的单词时输入每个单词的模式?
如果我用不同的词替换“10”的每个实例,我可能会做一定程度手动:
/10
cw
<type word>ESC
ncw
<type word>ESC
ncw
<type word>ESC
似乎没有哪个过于繁重,如果每个字是不同的,有无论如何都要单独打字。
在示例中显示,替换词有增量编号,那么您需要什么或替换可能是随机的? – Sundeep