Vim 技巧 - 遍历改变列表
每当对文档做出修改后,Vim 都会记录当时光标所在的位置。遍历改变列表的方法很简单,并且这大概是跳到你要去的地方的最快方式。
你是否曾经使用过撤销命令,然后紧接着又重做呢?这两条命令的结果会相互抵消,不过却会带来一个副作用,即最终光标会停留在上次修改过的地方。如果我们恰好是想跳回到上次修改过的地方,那么就可以用这招。虽然有点剑走偏锋,不过 u<C-r>
确实能让我们跳回到那里。
Vim 会在编辑会话期间维护一张表,里面记载我们对每个缓冲区所做的修改,此表就是所谓的改变列表(change list,参见:h changelist)。用下面的命令可以查看其内容:
➾ :changes
不过目前 VSCodeVim 还不支持此功能,但支持下面的功能
# 遍历改变列表
Vim 为每次修改都记录了行号与列号,我们可以用 g;
和 g,
命令反向或正向遍历改变列表。你可以拿 ;
和 ,
命令当参考,来帮你记忆 g;
与 g,
命令。
要想跳到上次文档中被更改过的地方,我们可以按 g;
。它会跳到上次完成编辑时光标所在的行及列上,其结果与按 u<C-r>
类似,只是它不会对文档造成暂态的改变。
# 标识上次修改方位的位置标记
Vim 会自动创建一些位置标记,它们是对改变列表的一个有用补充。`. 标记总是指向上次修改的位置(参见:h`.),而 `^ 标记则会记录上次退出插入模式时光标所在的位置(参见:h`^)。
在大多数场景下,跳转到 `. 的效果与使用 g;
命令相同。不过位置标记只指向最后修改的位置,而改变列表中则保存了多组位置。我们可以多次按 g;
命令,每次它都会把我们带到改变列表中较早的一个位置,而 `. 则总是把我们带到改变列表的最后一项。
`^ 标记指向上次插入的位置,它比上次修改的位置更具体一点。如果我们先退出插入模式,接着又在文档中四处移动,然后,当我们又想快速回到退出的地方继续编辑时,用 gi
命令就行了(:h gi)。此命令会用 `^ 标记恢复光标位置,并切换到插入模式,这真是省时省力的好办法!
Vim 会为编辑会话中的每个单独缓冲区维护一个改变列表,而与之不同的是,每个窗口都会创建一个单独的跳转列表。