<Undo> 或 undo<Undo>u
u 撤销 [count] 次更改。
:u:un:undo
:u[ndo] 撤销一次更改。
E830
:u[ndo] {N} 跳转到第 {N} 号更改之后的状态。{N} 的含义见
undo-branches 。
CTRL-RCTRL-R 重做 [count] 次已撤销的更改。
:red:redoredo
:red[o] 重做一次已撤销的更改。
U
U 在最近发生更改的单行上,撤销最近全部更改。 U 命令自身
也算一次更改,因此可用 U 撤销上一次 U 。
Vim 会记录最近的更改,可用上述撤销和重做命令将文件恢复到历次更改之前的状态。也
可重新应用更改,前进到执行撤销前的文本状态。
U 命令在撤销/重做体系中来和普通命令同等对待。所以 u 可以撤销 U 命令、
CTRL-R 也可以重做对 U 命令的撤销。混用 U 、 u 和 CTRL-R 三条命令时,
会发现 U 命令会将一行恢复到上一次执行 U 命令之前的状态,这一点容易令人困
惑。多练习几次就会习惯。
U 命令总会将缓冲区标记为已修改。即使它将已修改缓冲区的内容恢复至未修改时的状
态,缓冲区仍被视为已修改。改用多次 u 命令,才能使缓冲区恢复为未修改状态。
以上仅讨论了单线的撤销/重做历史。Vim 支持撤销分支。撤销若干更改后,另起一个新
更改,此时,已撤销的更改历史就会形成分支。下述命令可切换到该分支。
用户手册 usr_32.txt 有详细说明。
:undol:undolist
:undol[ist] 列出撤销树的所有叶节点。示例:
编号 变更 时间 保存
88 88 2010/01/04 14:25:53
108 107 08/07 12:47:51
136 46 13:33:01 7
166 164 3 秒前
"编号" 列为更改号。该编号持续递增,用于定位相应的可
撤销更改,参见 :undo 。
"变更" 列为从撤销树的根节点到该叶节点所需的更改数量。
"时间" 列为更改发生的时间。共四种格式:
N 秒前
HH:MM:SS 时、分、秒
MM/DD HH:MM:SS 月、日、时、分、秒
YYYY/MM/DD HH:MM:SS 年、月、日、时、分、秒
"保存" 列标记更改是否已写入磁盘,并记录是第几次写入文
件。可搭配 :later 和 :earlier 命令使用。
要查看更多信息,可用 undotree() 函数。
g-
g- 切换到较早的文本状态。给出 [count] 时,重复执行指定次
数。
:ea:earlier
:ea[rlier] {count} 切换到 {count} 次较早的文本状态。
:ea[rlier] {N}s 切换到约 {N} 秒前的文本状态。
:ea[rlier] {N}m 切换到约 {N} 分钟前的文本状态。
:ea[rlier] {N}h 切换到约 {N} 小时前的文本状态。
:ea[rlier] {N}d 切换到约 {N} 天前的文本状态。
:ea[rlier] {N}f 切换到 {N} 次较早文件写入时的文本状态。
如果上次文件写入后有更改,":earlier 1f" 会恢复上次写入
时的文本。无更改时则会切换到再上一次写入时的文本。
处于首次文件写入时的文本状态、或文件从未写入时,
":earlier 1f" 会退回到首次更改前最早的文本状态。
g+
g+ 切换到较新的文本状态。给出 [count] 时,重复执行指定次
数。
:lat:later
:lat[er] {count} 切换到 {count} 次较新的文本状态。
:lat[er] {N}s 切换到约 {N} 秒后的文本状态。
:lat[er] {N}m 切换到约 {N} 分钟后的文本状态。
:lat[er] {N}h 切换到约 {N} 小时后的文本状态。
:lat[er] {N}d 切换到约 {N} 天后的文本状态。
:lat[er] {N}f 切换到 {N} 次较新的文件写入时的文本状态。
处于最后一次文件写入时的文本状态时,":lat[er] 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+" 可以。