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

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

#1 楼

您正在寻找undo-blocks的定义。

:h undo-blocks中:该命令使。可撤消的更改序列形成一个撤消块。
因此,如果键入的键调用一个函数,则该函数中的所有命令都将被撤消。


redo使用相同的块。从:h redo开始:


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


评论


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

– fruglemonkey
16年4月4日,0:06

#2 楼

Vim的模态编辑通常被视为操作符(例如cd,...)应用于运动(例如iww},...)上。作为出色的副产品,Vim获得了大块的撤消功能。当其他编辑者不得不做出一些猜测才能将许多小的撤消变为撤消块时,Vim会自然地做到这一点。另一个副作用是,这给您一个重复操作符.(又名dot命令)。

您的问题专门提到了击键,因此我假设您想知道如何在插入模式下撤消较小的更改。答案是这不是“ Vim方式”。 “ Vim方式”意味着您将一次处于插入模式,短暂爆发。这意味着当在插入模式下出错时,您通常会退回到普通模式并更正文本,或者只是执行撤消操作u,然后重写文本。在插入模式下。在插入模式下,可以通过<c-g>u完成此操作。有关更多信息,请参见:h :undoj:h undo-blocks

要获得更多帮助,我建议以下内容:


模式编辑:撤消,重做和重复
撤消分支和Gundo.vim


评论


“笨拙的撤消”-我见过的最好的描述。

–马特·帕克(Matt Parker)
16-2-12在23:42

#3 楼

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

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

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