我正在编辑一个文件,我想只用另一个单词更改一个特定单词,但仅限前N次出现。我尝试了多个命令
N :s/word/newword/
:%s/word/newword/count
我可以在谷歌上找到的其他命令。但它们都不起作用。
EDIT :: Vim命令是首选。但也可以使用Vim脚本。我在vim脚本编写方面没有任何经验。
答案 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提供(以及其他许多人)以yyynyn
或1-5
形式接听答案的命令:
:%SubstituteSelected/word/newword/g 1-5