上面我们只讨论了单线的撤销/重做。但你也可以进行分支。考虑你先撤销了若干改变,
然后又进行了一些其它的改变。此时,被撤销的改变就成为一个分支。下面的命令使你能
够到达那个分支。
这在用户手册中有解释: usr_32.txt 。
:undol:undolist
:undol[ist] 列出改变树的所有叶结点。例如:
number changes when saved
88 88 2010/01/04 14:25:53
108 107 08/07 12:47:51
136 46 13:33:01 7
166 164 3 seconds ago
"number" 列是改变号。这个编号持续增加,用于标识特定可
撤销的改变,参见 :undo 。
"changes" 列是树的根结点到此叶结点所需的改变数目。
"when" 列是此改变发生的日期时间。四种可能的格式是:
N seconds ago
HH:MM:SS 时分秒
MM/DD HH:MM:SS 同上,还有月日
YYYY/MM/DD HH:MM:SS 同上,还有年
"save" 列给出此改变是否已写入硬盘和第几次写入文件。可
用于 :later 和 :earlier 命令。
要更详细的信息可用 undotree() 函数。
g-
g- 转到较早的文本状态。如果带计数,重复那么多次。
:ea:earlier
:earlier {count} 转到 {count} 次较早的文本状态。
:earlier {N}s 转到大约 {N} 秒钟之前的较早的文本状态。
:earlier {N}m 转到大约 {N} 分钟之前的较早的文本状态。
:earlier {N}h 转到大约 {N} 小时之前的较早的文本状态。
:earlier {N}d 转到大约 {N} 天之前的较早的文本状态。
:earlier {N}f 转到 {N} 次文件写入之前的较早的文本状态。
如果上次写入之后有改动,":earlier 1f" 会恢复文本到上次
写入时的状态。否则会转到再上一次写入时的状态。
如果在第一次文件写入的状态,甚至于从未写入过文件,
":earlier 1f" 会转到首次改变之前的状态。
g+
g+ 转到较新的文本状态。如果带计数,重复那么多次。
:lat:later
:later {count} 转到 {count} 次较新的文本状态。
:later {N}s 转到大约 {N} 秒钟之后的较新的文本状态。
:later {N}m 转到大约 {N} 分钟之后的较新的文本状态。
:later {N}h 转到大约 {N} 小时之后的较新的文本状态。
:later {N}d 转到大约 {N} 天之后的较新的文本状态。
:later {N}f 转到 {N} 次文件写入之后较新的文本状态。
若在在最后一次文件写入的状态,":later 1f" 会转到最新的
文本状态。
注意 如果由于 'undolevels' 选项,撤销信息被清空,那么文本状态将无法访问。
在不同时间点上移动的时候,不要奇怪一个时间点会同时发生多个改变。通过撤销树跳转
然后又做了新的改变后就会发生这种情况。
示 例
从这一行开始:
one two three
按三次 "x" 删除第一个单词:
ne two three e two three two three
现在按 "u" 三次撤销:
e two three ne two three one two three
按三次 "x" 删除第二个单词:
one wo three one o three one three
现在按 "g-" 三次撤销:
one o three one wo three two three
现在,回到第一个撤销分支,也就是在删除 "one" 之后。重复 "g-" 会回到原始文本:
e two three ne two three one two three
使用 ":later 1h" 跳到最后一次改变:
one three
使用 ":earlier 1h" 再次回到开始:
one two three 注意 使用 "u" 和 CTRL-R 无法得到全部可能的文本状态,但是重复 "g-" 和 "g+" 却可
以。