当我使用
时%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很好地完成了这个功能。答案 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…