使用vim更换模式时,是否移到上一次发生或取消上一次更换?

使用vim更换模式时,是否移到上一次发生或取消上一次更换?,vim,Vim,当我使用 %s/foo/bar/gic 要将上下文中的一些foo替换为栏,唯一可用的选择是(y/n/a/q/l/^E/^y) 具体而言: 是的 n--没有 a--好的 q--退出 l——改变电流并停止 ^E——向下滚动一行 ^Y——向上滚动一行 如果要将光标移动到上一个位置,或撤消上次替换,该怎么办 看来唯一能四处走动的方法就是1。通过q2退出替换模式。通过u撤消以前的更改,3。从当前行进入替换模式,.$s/foo/bar/gic 顺便说一下,emacs很好地完成了这个功能。您可以使用我编写的

当我使用

%s/foo/bar/gic
要将上下文中的一些foo替换为,唯一可用的选择是(y/n/a/q/l/^E/^y)

具体而言:

是的

n--没有

a--好的

q--退出

l——改变电流并停止

^E——向下滚动一行

^Y——向上滚动一行

如果要将光标移动到上一个位置,或撤消上次替换,该怎么办

看来唯一能四处走动的方法就是1。通过q2退出替换模式。通过u撤消以前的更改,3。从当前行进入替换模式,.$s/foo/bar/gic

顺便说一下,emacs很好地完成了这个功能。

您可以使用我编写的,因为我对Vim的
:s//c
选项不满意。通过按ctrl-n,可以在正常模式下替换上一次替换的高亮显示的匹配项,以便可以同时自由移动和编辑


或者,Vim内置的
cgn
将光标前面的下一个匹配项替换为您键入的文本,并且可以用
重复,但它不允许您使用诸如反向引用之类的正则表达式。

以下是一个简单的工作流程:

gg            " jump to first line of the buffer
/foo          " jump to first occurrence of 'foo'
nnn           " jump to next interesting occurrence of 'foo'
:s//bar/ig    " perform your substitution
nn            " jump to second next occurrence
&             " repeat the substitution
n             " jump to next occurrence
and so on...
以及使用
:vimgrep
和快速修复列表的变体:

:vim foo %       " search for 'foo' in the current buffer

jump to next/previous matching line with :cn/:cp

:s/foo/bar/ig    " perform your substitution

jump to next/previous matching line with :cn/:cp

&                " repeat your substitution

jump to next/previous matching line with :cn/:cp

&                " repeat your substitution

and so on…

/c
的要点是提示确认。如果您不想对当前匹配执行替换。。。不要按
y
。或者,您可以使用
:grep
:vimgrep
并使用快速修复列表来导航匹配项,并在需要时使用
&&
执行替换。如果行有多个匹配项,则此操作无效though@sosmo当前位置我会非常惊讶。它会立即替换一行中的所有事件,如果你试着用“c”这个词