我正在编辑一个文件,我只想用另一个单词更改一个特定单词,但仅限于前 N 个出现的单词。我尝试了多个命令
N :s/word/newword/
:%s/word/newword/count
以及我可以在谷歌上找到的其他命令。但它们都不起作用。
编辑:: Vim 命令是首选。但也可以使用 Vim 脚本。我之前没有任何 vim 脚本编写经验。
使用一次性记录可以让您准确控制所做的更改数量:
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@:
虽然有点长,但你可以这样做:
:call feedkeys("yyyq") | %s/word/newword/gc
替换前 3 个出现的位置,然后停止。 您可以更改
y
的数量以进行更多或更少的替换。 (也可以使用n
跳过一些)
说明:这是将
y
按键输入到替换命令的 /c
确认选项中。
我不确定是否指定前 N 次出现,但我经常使用这个命令:
:%s/word/newword/gc
Vim 然后要求确认每次出现的
word
,这样你就可以有选择地更改一些,但不能更改其他。
可以通过使用多个正则表达式来完成:
:%s/\(word.\{-}\)\{3}\zs/*
这只是在第三次重复时放置了一个特殊的“停止”代码
*
:%s/word[^*]/newword /g
这会替换所需的单词,直到“停止字符”
:%s/\*//
这会删除“停止字符”