在很多其他的文本编辑器当中,每当我们在输入后调用撤销命令的时候,大部分情况下恢复的都是最后输入的那个词甚至是字符。 然而, 在VIM当中, 我们可以控制撤销命令的粒度(granularity)。
在Normal Mode中: u命令起到撤销的作用, 它能用来恢复最近的改动。 根据我们在Tip1, Tip4, Tip6当中的内容, 且参考.命令中改变(Change)的范围, 我们不难得出:

一个改变可以是任何对文档中文本的改动, 包括从Normal、Visual 以及 Command-Line Mode当中调用的命令, 也包括任何在Insert Mode当中被输入或者被删除的文本。 (即在Tip6中提到的, 在Normal Mode中, 如i{输入一些文本}<ESC>这能构成一个改变(Change))

在本文开头,我们提到了很多其他文本编辑器(尤指没有模式提供的)在调用恢复命令的时候, 通常只能恢复最后输入的那个字符又或者是最后输入的词。
而在VIM中, 我们在开头也提到了它可以控制撤销命令的粒度。 我们刚才的结论也提到了, 从我们进入Insert Mode的那一刻到我们退出至Normal Mode这期间我们所做的改变(输入或者是删除)算做一个改变(Change)。 由此, 我们可以令撤销命令作用于词语,句子甚至段落上面等等, 而这些取决于我们如何使用<ESC>键。

那么, 如何控制我们使用<ESC>来退出插入模式的频率呢, 这取决于个人喜好。
Practical Vim》的作者就提供了一个自己的使用习惯:
当作者在VIM中写东西的时候, 通常在句子的结尾暂停(Pause)一下以思考下面该写什么。 这期间, 每一个停顿(Pause)生成了一个自然的停顿点。 当作者想继续写的时候, 通常就按A来继续。 这样做的好处是: 当作者觉得自己写错了, 可以轻松地切换到Normal Mode然后通过u来恢复。这样使得行文的恢复或者撤回连贯, 带来的好处不言而喻。 并且当作者在插入模式当中, 光标处于行末的时候, 最快捷方便的方法新建一行是<Enter>, 但是有时候会更偏向于<ESC>o以求撤销(Undo)命令于此位上有个额外的粒度(granularity)。

当然, 这是《Practical Vim》一书的作者的写作习惯。 怎么利用撤销命令的粒度来打造属于我们自己的撤销取决于我们的写作习惯。

在书中Tip8末, 有个注意事项, 大意是: 如果在Insert Mode当中, 我们使用了方向键<Up>, <Down>, <Left>, <Right>, 那么新的Undo断点便会由此产生。 产生的效果就好像我们切换回了Normal Mode然后用了hjkl命令。这同样也适用于.命令。

参考: 《Practical Vim》- Tip 8