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

Ign*_*ted 10 vi vim

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

N :s/word/newword/

:%s/word/newword/count

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

EDIT :: Vim命令是首选.但也可以使用Vim脚本.我没有任何vim脚本编程经验.

rom*_*inl 17

使用一次性录音可以精确控制您所做的改变:

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
Run Code Online (Sandbox Code Playgroud)

:help recording:help gn.

另一种方式,使用:normal:

:norm! /foo<C-v><CR>cgnbar<C-v><Esc>     <-- should look like this: :norm! /foo^Mcgnbar^[
11@:
Run Code Online (Sandbox Code Playgroud)

:help :normal:help @:.

或者干脆:

:/foo/|s//bar<CR>
11@:
Run Code Online (Sandbox Code Playgroud)


Cae*_*aek 11

虽然有点长,但你可以这样做:

:call feedkeys("yyyq") | %s/word/newword/gc
Run Code Online (Sandbox Code Playgroud)

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

说明:这会将y键击输入到/c替换命令的confirm选项中.

  • `:调用feedkeys(重复("y",3)."q")| %s/test/toast/gc`为特定金额.其中3是要替换的事件数. (6认同)
  • 非常聪明的主意. (3认同)

Yep*_*_Me 5

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

:%s/word/newword/gc
Run Code Online (Sandbox Code Playgroud)

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