VIM:查找并替换单词的前N次出现

时间:2014-09-15 03:51:17

标签: vim vi

我正在编辑一个文件,我想只用另一个单词更改一个特定单词,但仅限前N次出现。我尝试了多个命令

N :s/word/newword/

:%s/word/newword/count

我可以在谷歌上找到的其他命令。但它们都不起作用。

EDIT :: Vim命令是首选。但也可以使用Vim脚本。我在vim脚本编写方面没有任何经验。

4 个答案:

答案 0 :(得分:16)

使用一次性录音可以准确控制你做了多少改变:

qq             " start recording in register q
/foo<CR>       " search for next foo
cgnbar<Esc>    " change it to bar
q              " end recording
11@q           " play recording 11 times

请参阅:help recording:help gn

另一种方法,使用:normal

:norm! /foo<C-v><CR>cgnbar<C-v><Esc>     <-- should look like this: :norm! /foo^Mcgnbar^[
11@:

请参阅:help :normal:help @:

或者简单地说:

:/foo/|s//bar<CR>
11@:

答案 1 :(得分:11)

虽然时间稍长,但你可以这样做:

:call feedkeys("yyyq") | %s/word/newword/gc

替换前3次出现然后停止。 您可以为更多或更少的替换更改y的数量。 (也可以使用n跳过一些)

说明:这会将y次击键输入到替换命令的/c确认选项中。

答案 2 :(得分:5)

我不确定指定前N次出现,但我经常使用此命令:

:%s/word/newword/gc

然后Vim要求确认word的每次出现,这样你就可以有选择地改变一些而不是其他的。

答案 3 :(得分:2)

我的PatternsOnText plugin提供(以及其他许多人)以yyynyn1-5形式接听答案的命令:

:%SubstituteSelected/word/newword/g 1-5