2017-04-21 44 views
2

例如,我有一个文本, 10 3 4 2 10,如图4所示,10 ....如何在VI/VIM编辑器中用每种情况下不同的发现词替换?

没有我想用不同的话

我知道%S/10 /替换来改变各10 -words/gc但它只让我替换为yes/no的交互方式,但我想用replace1,3,4,2,replace2,4,replace3等不同的词来更改每个出现的10个字符....

+0

在示例中显示,替换词有增量编号,那么您需要什么或替换可能是随机的? – Sundeep

回答

3

替换每个出现10replace{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

注:这是一个快速草稿,不可能达到它的最佳&干净的方法,如果有人想要改进它,请随时添加评论

+0

如果每个替换词都不一样?并感谢的人:) – rcShahi

+0

更新了我的答案 –

+0

好的,谢谢兄弟我是新的vi,所以它会很好,如果你详细说明这个命令中使用的每个术语 – rcShahi

1

是否存在您想要的单词的模式,或者您希望在每次出现要替换的单词时输入每个单词的模式?

如果我用不同的词替换“10”的每个实例,我可能会做一定程度手动:

/10 
cw 
<type word>ESC 
ncw 
<type word>ESC 
ncw 
<type word>ESC 

似乎没有哪个过于繁重,如果每个字是不同的,有无论如何都要单独打字。

+0

这将引发在我的情况的错误,并说“E486:找不到模式:10cw: – rcShahi

+0

@rcShahi这是因为这意味着'/ 10 cw'这是很容易忘记,因为它是明确的的vimuser您正在搜索。 10 –

+0

最后我得到了你的男人,现在我在笑我:) – rcShahi

相关问题