例如我有一些文字:
'y' to substitute this match
'l' to substitute this match and then quit ("last")
'n' to skip this match
<Esc> to quit substituting
'a' to substitute this and all remaining matches {not in Vi}
'q' to quit substituting {not in Vi}
和:%s/substitute/sub/gc
我可以交互式搜索/替换。如果我按下&#39; n&#39;它转到下一个匹配的模式,我该如何撤消&#39; n&#39;?或向后搜索?
在通常的搜索模式/search_word
中,我们可以跳过&#39; n&#39;和&#39; N&#39;有没有类似的替代品 - :%s/substitute/sub/gc
?
答案 0 :(得分:7)
s/.../.../
的力量来满足您的替代需求,那可能还不够。例如,替换部分中的多个单词替换,后向引用或函数表达式。
我能想到的是,先做一个:
:s/substitute/sub/c
注意,没有% range
和g
标记。
然后你就是:
n
或N
进行/向后搜索,&
,u
关键是,&
将重做最后一次替换。
通过这种方式,您可以进行更复杂的替换,这对简单的cw
来说很难:
s/f../&, /
在所有fxx
字后添加逗号(foo,far,fur ......)s/\v(foo)(\d+)/\=submatch(1).(submatch(2)+1)/
foo
答案 1 :(得分:6)
就个人而言,我更喜欢.
command而不是替代c标志,这会增加更多的灵活性。
做这样的事情:
/substitute<cr>
cwsub<esc>
搜索“替换”,然后cw
(更改单词)为“sub”(<esc>
退出插入模式)
现在,您可以使用n
和N
移动并使用点.
命令将“替换”替换为“sub”。使用u
,您甚至可以撤消最后一个。
答案 2 :(得分:0)
我刚刚为此制作了一个插件。它比其他答案更广泛,所以如果您对插件感到满意,您可能会喜欢它
https://github.com/sosmo/vim-easyreplace
基本上,当你按ctrl-n时,它会逐个执行你对每个匹配的替换。