在Vim中如何撤销多次操作?

7
假设我在文档中处于状态A,我对B、C和D进行更改。现在,当我键入“u”时,状态将变为C。再次键入“u”,它将返回到D。(第二次撤销对我来说看起来像是重做)。
我理解的是,撤销的意思是撤销一次将返回到C,然后撤销再次将返回到B,再次撤销将返回到A。
另外,我知道“u3”可行,但在大多数情况下,我无法跟踪状态更改的数量。
如何在Vim中实现无限撤销?

1
这里的实际问题或困扰是什么? - Sam Protsenko
@SamProtsenko,那么在编程中,“撤销”命令类似于Word中的“Ctrl+Z”吗? - assiegee
1
每次更改后(按Esc键),您只需要从插入模式退出到命令模式,然后就可以多次撤消操作(只需单击u)。 - Sam Protsenko
@SamProtsenko 这正是我所期望的。但每次我按“u”键时,它都会在状态C和D之间跳转,而不是从C到B。 - assiegee
1
听起来你处于兼容模式。创建一个 ~/.vimrc 文件。 - FDinoff
2个回答

9

如果您处于Vi兼容模式,那么您只有一级撤销功能。通过处于“兼容”模式,您将错过许多其他功能。只需创建一个〜/ .vimrc文件,您就可以自动禁用'compatible'模式。

如果使用'nocompatible',您将获得哪些出色的撤销功能呢?

  • 无限制的撤销
  • 持久性撤销
  • 撤销分支(类似于撤销树)

5
一个侧面的提示:检查是否处于兼容模式,输入 :set compatible? - Yosh
1
在Ubuntu 20.04中,创建 .vimrc 文件不会隐式设置 nocompatible,至少在以 vi 形式调用时不会。 - Jeff Learman

1

我喜欢旧版的vi撤销/重做命令,它允许多次按下撤销(u)或重做(CTRL-R),而不是浏览历史记录以确定要撤消的更改数量。

vi命令使用~/.exrc文件,而不是~/.vimrc,因此只需将“set nocompatible”添加到文件中即可。

请注意,我喜欢使用单个撤销/重做跳回到我更改的文件中的最后一个位置,“u”后跟CTRL-R就可以了。我也可以一直按住“u”,直到所有更改都被撤消,包括我可能已经保存的更改。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接