Vim搜索和替代

时间:2016-10-16 15:58:28

标签: vim

我有一个例子:

a, an [e, en]
and [end]
afraid [e'freid]
...

是否可以只在括号中搜索?并在那些字母被取代? 我想将搜索与替换相结合> /\[.*\]:%s/e/ə/gc

3 个答案:

答案 0 :(得分:4)

你可以这样做:

:%s/\[\zs.*\ze\]/\=substitute(submatch(0), 'e', 'ə', 'g')/

不幸的是,我不知道如何让/c在那里工作。

可替换地,

:%s/\%(\[.*\)\@<=e\%(.*\]\)\@=/ə/gc

这个有点“蛮力”,可能会在很长的路线上运行得很慢。

答案 1 :(得分:0)

单向(从命令模式):

:!perl -i -pe 'BEGIN{ sub f {$_ = shift; s/e/a/g; return "[$_]" }}; s/\[(.*?)\]/f($1)/e' %

答案 2 :(得分:0)

我的PatternsOnText plugin提供:SubstituteInSearch(以及更多)命令。它基本上是对@ melpomene的回答的简化。

:%SubstituteInSearch/\[.*\]/e/ə/gc