BBS水木清华站∶精华区

 
何谓 Undo 
 
     在 EMACS 中想要将已经做过的动作放弃,以恢复旧观。 EMACS 将其 
     称为  undo,以下就介绍如何  undo: 
 
        o   Ctrl-x u(undo) 
        o   Ctrl-\_  (undo) 
 
          以上两个 Hotkey 都是用来执行  undo 的指令。 
     提供二个 Hotkey,是因为有些键盘并无明显使用 `` Ctrl-\_'' 的方法, 
     为了弥补无法以一个字元达到  undo 效果的键盘,故另行提供 
     `` Ctrl-x u'' 给无法使用 `` Ctrl-\_'' 的使用者。 
          EMACS 所提供的  undo,可以连续恢复最近使用过的指令。 
     undo 的顺序是最新使用过的指令最先被  undo ,第二次使用 
      undo 则恢复第二新的指令,任何指令的输入(除了  undo 本身之外) 
     都会使指令输入的顺序 重整, 这也同时影响  undo 的顺序。 
 
          使用  undo 有一个限制,就是  undo 只能  undo 
     对缓冲区内容造成改变的指令。对於只是改变游标动作的指令,是无法以 
     undo 来恢复旧观。若所有修改过内容的指令,都以  undo 恢复原状後, 
     再一次使用  undo 的指令,echo area 会出现如下的讯息: 
 
             no furter undo information 
 
     当使用了  undo 之後,还想要在  redo 这个已被 undo 的动作时, 
     有一个技巧可以达成如此的效果。 
 
       1.  首先键入一个不会改变缓冲区内容的指令(如游标移动的指令),使原来 
                存放指令的顺序因新指令的加入而改变。 
       2.  再使用一次  undo 的指令,就可以达到  redo 的效果了。 
 
     现举一实例来说明此 > 视窗上现有的资料为: 
 
           This is a test. 
 
   *  如下为所执行的一连串指令,括号内表示所用过的指令: 
 
 
 
       1.  执行四次 DEL ,视窗显示如下的讯息: 
 
                    This is a 
 
                    所使用的指令集如下: 
                     DEL DEL DEL DEL 
 
       2.  将游标至字元 ``i'' 处,视窗显示的讯息并无改变: 
 
                    This is a 
 
                    所使用的指令集如下: 
                     DEL DEL DEL DEL 
 
       3.  键入 Meta-d,视窗显示如下的讯息: 
 
                    This  a 
 
                    所使用的指令集如下: 
                     DEL DEL DEL DEL Meta-d 
 
       4.  键入 Ctrl-x u,视窗显示如下的讯: 
 
                    This is a 
 
                    此时恢复最新被使用过指令 ``Meta-d'' 前的状况 
                  (Ctrl-x u 不为恢复的对象),也就是步骤二的情形。 
                    此时使用的过指令集如下: 
                     DEL DEL DEL DEL Meta-d Ctrl-x u 
 
       5.  键入 Ctrl-f,视窗仍出现与先前相同的讯息: 
 
                    This is a 
 
                    所使用的指令集则增加如下: 
                     DEL DEL DEL DEL Meta-d Ctrl-x u Ctrl-f 
 
       6.  此时可以 Ctrl-x u 恢复第一次  undo 前的状况, 
                   即步骤三的状况。视窗出现: 
 
                    This  a 
 
                    因为记录指令历史的指标,此时己在第二个 Ctrl-x u 处,但 
                    Ctrl-x u Ctrl-f 均不在  undo 的行列中,所以此时可以再恢 
                    复一次 Meta-d 前的状况。 
                    所使用的指令集如下: 
                     DEL DEL DEL DEL Meta-d Ctrl-x u Ctrl-f Ctrl-x u 
 
 
一般而言,每一个使用过的编辑指令都有一个与之相对应的  undo 记录。 
每一个  undo 的记录,都只对目前的缓冲区有效。有的指令需要一个 
以上的  undo 记录来完成  undo 的动作;有的指令会先汇集一群 
 undo 的记录,当使用  undo 时,会将此汇集的结果一次展现出来。 
例如,单一字元运作的指令,若每次使用  undo ,只恢复一个字元则 
非常的不经济,所以遇到此种情形,以集合体的方式处理是比较合理的作法。 
 

BBS水木清华站∶精华区