使用vim替换模式时,移动到上一个事件或取消上一个放置?

时间:2015-04-06 07:00:40

标签: vim

当我使用

%s/foo/bar/gic

bar 的上下文中替换 foo 部分,唯一可用的选择是(y / n / a / q / L / ^ E / ^ Y)

具体是:

是 - 是的

n - 没有

a - 全部

q - 退出

l - 进行当前更改并停止

^ E--向下滚动一行

^ Y--向上滚动一行。

如果我想将光标移动到上一次出现,或撤消上一次更换,该怎么办?

似乎唯一可以解决的方法是1.通过 q 退出替换模式2.通过 u 撤消之前的更改,3。从当前行输入替换模式通过,。$ s / foo / bar / gic

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

2 个答案:

答案 0 :(得分:1)

您可以使用我写的vim-easyreplace,因为我对Vim的:s//c选项并不满意。它允许您通过按ctrl-n替换正常模式下最后一次替换的突出显示的匹配,以便您可以同时自由移动和编辑。

或者,Vim的内置cgn会将您光标前面的下一个匹配替换为您键入的文字,并且可以使用.重复,但它不会让您使用像后向引用这样的正则表达式。

答案 1 :(得分:1)

这是一个简单的工作流程:

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和quickfix列表的变体:

: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…