本节书摘来自异步社区《Vim实用技巧(第2版)》一书中的第2章,第2.2节,作者:【英】Drew Neil(尼尔)著,更多章节内容可以访问云栖社区“异步社区”公众号查看
2.2 把撤销单元切成块
在其他编辑器中,输入一些词后使用撤销命令,可能会撤销最后输入的词或字符,然而在Vim中,我们自己可以控制撤销的粒度。
u 键会触发撤销命令,它会撤销最新的修改。一次修改可以是改变文档内文本的任意操作,其中包括在普通模式、可视模式以及命令行模式中所触发的命令,而且一次修改也包括了在插入模式中输入(或删除)的文本,因此我们也可以说,i{insert some text}<Esc>
是一次修改。
在不区分模式的文本编辑器中,输入一些单词后使用撤销命令,有两种可能。一种是它可能会撤销最后输入的字符;另一种做得更好点,它可能会把字符分成块,使每次撤销操作删除一个单词而不是一个字符。
在Vim中,我们自己可以控制撤销命令的粒度。从进入插入模式开始,直到返回普通模式为止,在此期间输入或删除的任何内容都被当成一次修改。因此,只要控制好对 <Esc>
键的使用,就可使撤销命令作用于单词、句子或段落。
那么,应该多久离开一次插入模式呢?这是个人喜好的问题,不过我喜欢让每个“可撤销块”对应一次思考过程。在写这段文字时(当然是在Vim中写的),我经常在每句话的结尾停顿一下,想一想接下来该写什么。不管停顿的时间有多短,每次停顿都是一个自然的中断点,提示我该退出插入模式了。当我准备好继续写时,按 A 命令就可以回到原来的地方继续写作。
如果我认为已经走错了方向,就会切换到普通模式,然后按 u 撤销。每次做撤销时,文字都按我最初书写时的思路,被切分成条理清晰的块,也就是说我可以很容易地试着写一两句话,如果感到不合适的话,随后按一两下键就可以将其舍弃。
当处于插入模式时,如果光标位于行尾的话,另起一行最快的方式是按 <CR>
。不过有时我更喜欢按 <Esc>o
,这是因为我有预感,也许在撤销时我想拥有更细的粒度。如果听起来这不太好理解,不必担心,当你对Vim越来越熟悉时,就会感到切换模式越来越轻松。
一般来讲,如果你停顿的时间长到足以问“我应该退出插入模式吗?”这个问题,就退出吧。
在插入模式中移动光标会重置修改状态
当我提到撤销命令会回退从进入插入模式到退出此模式期间输入(或删除)的全部字符时,我略过了一个小细节。如果在插入模式中使用了 <Up>
、<Down>
、<Left>
或 <Right>
这些光标键,将会产生一个新的撤销块。你可以把这想象为先切换回普通模式,然后用 h 、j 、k 或 l 命令对光标进行了移动,唯一区别是我们并没有退出插入模式。这也会对 . 命令的操作产生影响。