vi中的几种撤销


           (译者: jwdu  http://vimcdoc.sf.net)
撤销和恢复                                                 *undo-redo*
在用户手册的 |
02.5
| 节对它们的基本操作有解释。
1. 撤销和恢复操作的命令               |
undo-commands
|
2. 撤销操作的两种方法          |
undo-two-ways
|
3. 撤销操作的注释                |
undo-remarks
|
1. 撤销和恢复操作的命令                                       *undo-commands*
          或                                     *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"            两次撤销            空操作
"u CTRL-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:
以下内容比较易懂一些,对此进行详细说明:
撤销与重做
假设现在你删得太多了。当然,你可以重新输入需要的内容。不过,你还有一个更简单的
选择。"u" 命令撤销上一个编辑操作。看看下面这个操作:先用 "dd" 删除一行,再敲
"u",该行又回来了。
再给一个例子:把光标移到第一行的 A 上:
A young intelligent turtle
现在输入 xxxxxxx 删除 "A young"。结果如下:
intelligent turtle
输入"u" 撤销最后一个删除操作。那个删除操作删除字符 g,所以撤销命令恢复这个字符:
g intelligent turtle
下一个 u 命令恢复倒数第二个被删除的字符:
ng intelligent turtle
下一个 u 命令恢复 u,如此类推:
ung intelligent turtle
oung intelligent turtle
young intelligent turtle
young intelligent turtle
A young intelligent turtle
Note:
如果你输入 "u" 两次,你的文本恢复原样,那应该是你的 Vim 被配置在 Vi 兼容
模式了。看这里修正这个问题:|not-compatible|。
本文假定你
[url=javascript:;] 工作[/url]
在 "Vim 的方式"。你可能更喜欢旧的 Vi 的模式,但是你必须
小心本文中的一些小区别。
重 做
如果你撤销得太多,你可以输入CTRL-R(redo)回退前一个命令。换句话说,它撤销
一个撤销。要看执行的例子,输入CTRL-R两次。字符 A 和它后面的空格就出现了:
young intelligent turtle
有一个特殊版本的撤销命令:"U" (行撤销)。行撤销命令撤销所有在前一个编辑行
上的操作。 输入这些命令两次取消前一个 "U":
A very intelligent turtle
xxxx 删除 very
A intelligent turtle
xxxxxx 删除turtle
A intelligent
用 "U" 恢复行
A very intelligent turtle
用 "u" 撤销 "U"
A intelligent
"U" 命令本身就是一个改变操作,"u" 命令撤销该操作,CTRL-R 命令重做该操作。
有点乱吧, 但不用担心,用 "u" 和 CTRL-R 命令你可以切换到任何你编辑过的状态

转载于:https://my.oschina.net/alphajay/blog/42984

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值