Vim替换所有没有光标移动

pla*_*pus 22 vim macvim

在Vim,当我这样做时:

:%s/foo/bar/g
Run Code Online (Sandbox Code Playgroud)

它将在整个文档中用'bar'替换所有出现的'foo'.完成后,光标移动到'foo'替换为'bar'的最后位置.

:%s/foo/bar/g在发出此命令之前,如何在没有光标离开原始位置的情况下运行?

我可以在.vimrc文件中设置一些选项吗?

ib.*_*ib. 30

:substitute运行该命令时,在完成实际替换之前,光标的位置存储在跳转列表中.为了返回到最近跳转之前的位置,可以使用``''正常模式命令.前者完全跳转到存储位置,后者将光标移动到该位置所在行的第一个非空白字符.

因此,要快速将光标返回到其原始位置,请``在替换命令完成后键入 .

要组合替换并将光标移动到一个命令中,请发出

:%s/pat/str/g|norm!``
Run Code Online (Sandbox Code Playgroud)

或者,如果它足够跳到精确位置而不是跳到它的线上,

:%s/pat/str/g|''
Run Code Online (Sandbox Code Playgroud)

如上所示,由于Ex命令的范围语法(请参阅参考资料),''因此可以优先使用norm!''第二个命令:help :range.

  • @ib.`和`@mattn我认为这主要是品味问题.对我来说\`\`trumps <Co>(更容易打字,表达寄存器使用,并且逻辑上连接到`:''`,`:g // copy''`和东西.我不是没有人贬低这个答案但我当然认为对品味的不同意见不应成为低调的理由. (6认同)

Ste*_*sen 24

我只需在替换后键入Ctrl+ O以返回上一个位置.