*undo.txt* For Vim version 6.2. 最后更改:2002.7.30
Vim 参考手册 作者:Bram Moolenaar
(翻译:jwdu <[email protected]>
http://vimcdoc.sf.net)
撤销和恢复 *undo-redo*
在用户手册的 |02.5| 节对它们的基本操作有解释。
1. 撤销和恢复操作的命令 |undo-commands|
2. 撤销操作的两种方法 |undo-two-ways|
3. 撤销操作的注释 |undo-remarks|
1. 撤销和恢复操作的命令 *undo-commands*<Undo>
或 *undo* *<Undo>* *u* u 撤销[count]
次更改。{Vi: 仅有一级}
*:u* *:un* *:undo* :u[ndo] 撤销一次更改。{Vi: 仅有一级}
*CTRL-R*CTRL-R
恢复[count]
次没有完成的更改。{Vi: 刷新屏幕}
*:red* *:redo* *redo* :red[o] 恢复一个没有完成的更改。{Vi: 没有 redo}
*U* U 撤销最近对特定行所作的一系列更改。{Vi: while not moved off of it}
由于最近所作的更改是被记住的,因此,你可以应用上面的撤销和恢复命令把文件恢复 到你所作的更改以前的状态。当然,你也可以重新应用这些修改,把文件恢复到执行恢 复操作以前的状态。 对待"U"命令和对待撤销/恢复 (undo/redo) 命令的是一样的。如此来看,"u" 命令撤销 一个 "U" 命令、'CTRL-R
' 命令再次撤销 "U" 命令。当 "U", "u" 和 'CTRL-R
' 三个命 令混合使用时,你将注意到 "U" 命令决意将文件恢复到较早的 "U" 命令之前的状态。 这或许会令你困惑,但请你尽量习惯它。 "U" 命令总是把缓冲标志为改变状态.当 "U" 命令把改变的缓冲恢复到没有改变的 状态时,它还会认为缓冲处于改变状态。这时,使用 "u" 命令撤销改变直到缓冲的 状态变成不变.
2. 撤销操作的两种方法 *undo-two-ways* 撤销和恢复的工作方式依赖于 'cpoptions' 中 'u' 状态的标志。这里是 Vim(不包含 'u' 命令)和 vi-兼容(包含 'u' 命令)两种模式的工作方法。在 Vim 这种状态下, "uu" 命令撤销两次改变,在 vi-兼容模式下,"uu" 命令什么也不做(撤销一次撤销)。 不包含 'u' 的 Vim 工作方法: 你能及时的以撤销命令回到以前的状态。那时,你也可以以使用恢复命令再次前进。如 果在撤销命令后你做了一个新的改变,那么,恢复命令将什么也不做。 包含 'u' 的 Vi-兼容 工作方法: 撤销命令撤销包含以前的撤销命令在内的任何更改。恢复命令重复以前的撤销命令。但 它不重复一个改变的命令,如果你想如此,那么用 "." 命令。举例 Vim 模式 Vi-兼容 模式
"uu" 两次撤销 空操作 "uCTRL-R
" 空操作 两次撤销 原理: Nvi 使用 "." 命令而不是CTRL-R
。不幸的是,这不是 Vi 兼容的。例如 "dwdwu." 命令,在 Vi 中删除两个词,但在 Nvi 中,它什么也不做。
3. 撤销操作的注释 *undo-remarks* 改变的次数放置在 'undolevels' 选项中.如果它的值是零,Vi-兼容 方法是适用的。如 果它的值是负的,任何撤销都是不可能的。当你内存紧张的时候使用这个。 缓冲的标志 ('a 至 'z) 经常和文件一起被保存和恢复。{Vi 这样做的时候有一点不同}
当所有的改变都被撤销时,缓冲的标志是认为不改变的。这时退出 Vim 是使用 ":q" 而非":q!" 。{在 Vi 不是这样}
注意这是相对文件的最后写入而言的。和被写入的比较 ,在写入 ":w" 后写入 "u" 实际上改变了缓冲的状态,因此,此时,缓冲的状态认为是 改变的。 当手册 |folding| 被使用时,折叠将不被保存和恢复。只有完全在折叠内部的改变才被 保存,因为折叠第一和最后一行是不改变的。 有限的寄存器也可以被用作撤销删除。你每一次删除文件,寄存器都被放 "1. 因此,寄 存器的内容将从 "1. 变为 "2 ,依次类推。但 "9 将被丢失,现在,你可以通过命令 '"1P' 得到最近大部分被删除的文件。(同样,如果被删除的内容是最后被删除或复制 的,那么'P' 或 'p' 同样也可得到你要的结果,因为他们都拷贝未命名的寄存器的内容 )。使用'"3P' 你可以得到前三个被删除的文本。 *redo-register* 如果你想得到多于被删除文件一部分的内容,你可以重复使用 "." 这样一个特殊的命令 。这样将会增加所使用寄存器内的数字。所以,你如果先使用 ""1P" ,那么接下来的 "." 就意味着 '"2P 。重复这将会造成所有被编号的寄存器被插入。 例如: 如果你用 'dd....' 删除了内容,那么用 '"1P....' 可以恢复。 如果,你不知道被删除的内容在哪一个寄存器,你可以用 :display 命令。一种替代的方 法是在第一个寄存器试用 '"1P' ,如果它不是你要找的用 'u.' 命令。这将会移走第一 次放进的内容,然后在第二个寄存器重复上述命令。重复使用 'u.' 直到你得到想要的内 容。 vim:tw=78:ts=8:ft=help:norl:
Generated by vim2html on Tue Jul 27 00:35:24 CST 2004