当使用“ u”和“ CTL-R”时,vim如何确定单个“编辑”的大小?


17

在Vim中使用uCTL-R撤消或重新进行编辑时,我似乎是在改变文本块,而不仅仅是最近的击键。

是什么决定了视为单个编辑的块的大小?

Answers:


19

您正在寻找的定义undo-blocks

来自:h undo-blocks

一个撤消命令通常撤消键入的命令,无论该命令进行了多少更改。可撤消更改的此序列形成一个撤消块。因此,如果键入的键调用一个函数,则该函数中的所有命令都将被撤消。

相同的块用于redo。来自:h redo

记住最后的更改。您可以使用上面的undo和redo命令将文本还原为每次更改之前的状态。您还可以再次应用更改,在撤消之前找回文本。


4
您还可以CTRL-G u在插入模式下使用命令手动拆分单个撤消块,如果您有一些插入模式宏,这将很有用。
fruglemonkey '16

8

Vim的模态编辑通常被视为一个操作者(例如cd,...)施加在运动(例如iww},...)。作为一项出色的副产品,Vim获得了大块的撤消功能。当其他编辑者不得不做出一些猜测才能将许多小的撤消变为撤消块时,Vim自然会这样做。另一个副作用是,这使您可以重复操作.(也称为dot命令)。

您的问题专门提到了击键,因此我假设您想知道在插入模式下如何撤消小的更改。答案是这不是“ Vim方式”。“ Vim方式”意味着您一次将处于插入模式,短暂爆发。这意味着当在插入模式下出错时,您通常会退回到普通模式并更正文本,或者只是撤消u,然后重写文本。

有时,在插入模式下需要拆分一个撤消块。这可以通过<c-g>u在插入模式下完成。请参阅:h :undoj:h undo-blocks了解更多信息。

如需更多帮助,我建议以下内容:

:h undo-blocks
:h :undoj
:h undo-tree
:h persistent-undo
:h undo.txt

关于此主题也有一些截屏视频:


“笨拙的撤消”-我见过的最好的描述。
马特·帕克

6

您也可以这样想:每次进入插入模式来编辑文本并单击Esc时,都会形成一个障碍。如果尝试撤消该程序段,则在进入插入模式之前将转到相同的位置。

因此,您可以通过不时退出插入模式来“保存”更改:假设您进入了插入模式并编写了一个函数。您可以继续编码并转到下一个功能,但是有时最好返回正常模式并再次切换到插入模式。这样,您可以以一种简单的方式来构造代码,如果需要返回,则可以知道最终的位置。

注意:如果您使用箭头移动,就像按Esc+ [ hjkl]

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.