在 Vim 中,当我这样做时:
:%s/foo/bar/g
它将在整个文档中将所有出现的 'foo' 替换为 'bar'。完成后,光标已移动到最后一个将 'foo' 替换为 'bar' 的位置。
在发出此命令之前,如何:%s/foo/bar/g
在光标不离开原始位置的情况下运行?
我可以在.vimrc
文件中设置一些选项吗?
当:substitute
命令运行时,在执行任何替换之前,光标的位置存储在跳转列表中。为了回到最近一次跳转之前的位置,可以使用
``
或''
Normal-mode 命令。前者准确跳转到存储位置;后者跳转到存储位置所属行上的第一个非空白字符。
通过发出命令,可以同时调用替换命令并随后将光标移回
:%s/pat/str/g|norm!``
或者,如果不跳转到精确位置而仅跳转到包含行就足够了,则使用命令
:%s/pat/str/g|''
不需要在后一个命令中''
加上norm!
前缀,因为 ''
Ex 命令的范围语法允许的地址是指正常模式命令 ''
跳转到的同一行(请参阅
:help :range
);两者都只是查看'
伪标记的内容。
我只需在替换后键入Ctrl+O即可返回上一个位置。
它很旧,但是对于遇到这个问题的任何人,我想分享我的解决方案,因为即使没有任何替换它也能正常工作:
:exe 'norm m`' | %s/pattern/substitution/eg | norm g``
exe
是必需的,因为norm
将 bar 视为参数。