BBS水木清华站∶精华区

 
文件的移动与拷贝 
 
     变换文件在缓冲区出现的位置称为搬移(在缓冲区的其它地方重复出现 
     称为拷贝( Copy)。 
          前已论及放於  kill-ring 的文件,可在需要时拿出来使用, 
     此动作称为  yank\indexyank 。使用  yank 的方法 
     很简单,只要键入 ``Ctrl-x y''即可。使用此方法可将某特定区块的文件 
     做「搬移」的动作,只是所需的步骤比较烦琐而已。首先将要搬移的文件 
     重复以 `` Ctrl-x k'' 的指令,将其放入  kill-ring 中,再将 point 
     移至文件欲搬移的位置,以 `` Ctrl-y'' 将其  yank 出来。 
          「拷贝」一个区块的方法与「搬移」一个区块的方法累同,唯一 
     不同是要执行二次  yank 。第一次使用  yank,是将删除的 
     原文件再放回被删除的位置,第二次使用  yank 是做拷贝的动作, 
     也就是将  kill-ring 的文件放入要拷贝的地方。 
          以上的方法当然可以用来做搬移和拷贝之用,但如要搬移和拷贝的文件 
     有数十甚至数百数千列,岂不要重复 `` Ctrl-k'' 的动作数十甚至数百数千次。 
     因为 `` Ctrl-k'' 基本上是删除列的指令,当然删除列的指令,可以配合 
     numeric argument。但在使用数值引数之前还必需确定所欲搬移或拷贝的确实列数, 
     如此一来岂不使事情愈来愈复杂呢?所以,要搬移与拷贝文件最好的方法, 
     就是使用标记与区块。下面所谈的是针对区块的搬移与拷贝的方法。 
          不论搬移或拷贝,只要触及区块的使用,首要之事就是先把区块标示出。 
     区块定好之後,要搬移就以 `` Ctrl-w'', 将整个区块删除之後,再以 
     `` Ctrl-y'' 将其  yank 出来。要拷贝则以 `` Meta-w'' 将区块的内容 
     拷贝一份放在  kill-ring 中,尔後再以 
     `` Ctrl-y'' 将其  yank 出来。现说明搬移与拷贝的实际操作过程。 
 
        o  不设定区块,以删列的方式,将文件一列列先删除後,再 yank 出来。 
                此法可搬移与拷贝  kill-ring 内的文件。 
 
 
 
            1.  重复执行 `` Ctrl-k''(删除文件,可使用 numeric argument) 
 
            2.   Ctrl-y(将放置在  kill ring 中的文件,yank 至缓冲区内。) 
 
 
 
                  +  若做搬移的动作,只需使用一次  yank。 
 
                  +  若做拷贝的动作,则要使用二次的  yank。 
 
 
 
 
        o  以设定区块的方式,「搬移」区块的文字。 
 
 
 
            1.   Ctrl-@(设标记,也就是设定区块的起始值) 
 
            2.  移动游标以便设定  point的位置(设定区块的终点) 
 
            3.   Ctrl-w(删除所标示的区块) 
 
            4.  移动游标至要搬移的位置(确定文件搬移处) 
 
            5.   Ctrl-y(将放置在  kill ring 中的文件,yank 至缓冲区内。) 
 
 
        o  以设定区块的方式,「拷贝」区块的文字。 
 
 
 
            1.   Ctrl-@(设标记 (mark)) 
 
            2.  移动游标以设定  point的位置(设定区块的终点) 
 
            3.   Meta-w(不删除标示区块的内容,将此内容拷贝至  kill-ring 中) 
 
            4.  移动游标至要拷贝的位置(确定文件拷贝处) 
 
            5.   Ctrl-y(将放置在  kill-ring 中的文件, 
                        yank 至缓冲区内。) 
 
 
     为了更清楚搬移与拷贝後的真实结果,现举实例来说明。 
 
          实例:现有二段文件,第一段文字是做搬移与拷贝用的, 
     第二段文字是用来接收搬移後的文字。 
 
           第一段:标记设在第一列的 A 处,而 point设在 B 的地方。 
           1111111111A22222222222 
           3333333333333333333333 
           4444444444444444444444 
           55555B5555555555555555 
 
           第二段: point在 Y 处 
           00000Y0000000000000000 
           0000000000000000000000 
           0000000000000000000000 
 
     结果一、将第一段的文件搬移至第二段,搬移後的游标仍在 Y 处。 
           1111111111B5555555555555555 
 
           00000A22222222222 
           3333333333333333333333 
           4444444444444444444444 
           55555Y0000000000000000 
           0000000000000000000000 
           0000000000000000000000 
 
     结果二、将第一段的文件拷贝至第二段,搬移後的游标仍在 Y 处。 
           1111111111A22222222222 
           3333333333333333333333 
           4444444444444444444444 
           55555B5555555555555555 
 
           00000A22222222222 
           3333333333333333333333 
           4444444444444444444444 
           55555Y0000000000000000 
           0000000000000000000000 
           0000000000000000000000 
 
     执行搬移与拷贝的动作时, EMACS 所采取的一律是 
      insert-mode。此时,即使设定为覆盖( overwrite-mode), 
     覆盖的效果也会暂时失效。 
 
          区块的□围以标记(mark)为起始值,以 point所在位置之前 
     的字元做结束。所以,从以上的实例可以很清础的看到,搬移或拷贝之後 
     的文件会包括标记所在的字元,但不会包含  point所在的字元。 
     搬移或拷贝的文件会出现在  point之前,原先所有的文件会向後移动, 
     此时的  point仍在移动前的字元处。 
          区块是以标记为开始而以  point为终点所构成的。标记与 
     point所在的列,可能包含所在列的一部分,其它区块所包含的列都是完整的 
     一列。若搬移或拷贝的□围,为文件中某一个长方形的区域,那该如何来设定 
     其□围呢?设定好的□围又该如何来操作呢? EMACS 对於这种形状的区域有其它 
     的处理方式,称为长方形的区块 ( rectangle region)。 
          设定长方形( Rectangle)的方法与设定区块( Region)的方法是一样的 
     ,只是在理解上有所不同。长方形设定的方法,也是设定二个标记, 
     此两个标记位於长方形相对的两个直角上。所以,设定了左上角, 
     另一个标记一定要设在右下角;反之,如果设定了右上角,另一个标记就一定 
     要在左下角了。。此所设好的长方形, EMACS 称为  rectangle 。 
 
     长方形与区块的设定方法是一样,所以单从设定标记与  point的方式 
     ,是无法辨识二者的差别的。要知是使用区块或长方形,只有等到使用运作 
     於此□围的指令时才会知道。 
 
     若是以删除长方形的指令将长方形的区块删除时,此时删除掉的长方形文件 
     并不放在 一般的 kill-ring 中,而是放於别的地方。因为删除长方形的 
     运作方式与删除区块的方式不同,所以将长方形删除後的内容,与放置区块 
     删除後的内容分隔,以便管理。 
 
     长方形运作的种类与区块运作的种类累同,可分为二大类,一类 
     为删除与插入,另一类则专门用来处理空白。 
 
     删除长方形可以采取摒弃的方式 
     ( Ctrl-x r d)或将其储存於某处( Ctrl-x r k),以利事後的  yank 
     ( Ctrl-x r y) (yank-rectangle)。 
     删除掉的长方形资料的保存,只能保留最新删除的资料,所以只有最新 
     删除掉的长方形资料,才可以被  yank 出来。 
          长方形区块的运作种类,除了能将资料做删除与搬移外,还可以 
     在文件的某处加入固定区域的空白。因为从事编辑时,常需要在某一 
     区域加入一些空白( Ctrl-x r o)(open-rectangle)。 
     例如在文件加上空白做为边缘(margin);制作图表时留些空白;或将 
     某一区域的文件以空白取代( Meta-x clear-rectangle)等等。长方形 
     的运作与区块的运作最大不同处在於,无法直接做拷贝的动作,若要拷贝 
     必需先删除後再执行二次的  yank。现在就说明长方形区域的用法。 
 
        o  长方形区域的  yank 方法 
 
 
 
            1.   Ctrl-@(设定长方形区域的第一个对角) 
 
            2.  移动  point至第二个对角处(设定长方区域的第二个对角) 
 
            3.   Ctrl-x r k(kill-rectangle) 
                       删除设定好的长方形,以便  yank 使用。 
 
            4.  移动  point到要  yank 的地方。 
 
            5.   Ctrl-x r y(yank-rectangle) 
                       将删除的长方形,从储存处取出。 
 
 
        o  永远删除长方形的内容 
 
 
 
            1.   Ctrl-@(设定长方形区域的第一个对角) 
 
            2.  移动  point至第二个对角处(设定长方区域的第二个对角) 
 
            3.   Ctrl-x r d(delete-rectangle) 
                       删除设定好的长方形区域。此删除不会储存在某一定地方。换言之, 
                       一旦摒弃此区域,就无法将其唤回,除非使用  undo 的指令。 
 
 
        o  在长方形区域内插入空白,原文件向前(右)移动。 
 
 
 
            1.   Ctrl-@(设定长方形区域的第一个对角) 
 
            2.  移动  point(设定长方区域第二个对角) 
 
            3.   Ctrl-x r o(open-rectangle) 
                       填入空白在设定好的长方形区域内。此时区块内的文字会自动往右 
                       移动。使用  overwrite mode,原有的文件也不会被加入的空白覆盖。 
 
 
        o  将设定的长方形区域以空白覆盖 
 
 
 
            1.   Ctrl-@(设定长方形区域的第一个对角) 
 
            2.  移动  point至第二个对角处(设定长方区域第二个对角) 
 
            3.   Meta-x clear-rectangle 
                       将此长方形区块内的文件以空白取代。 
 
 
        o  在设定的长方形区域内填充某一类型的字串。 
                此方法常可用在程式的撰写或测试上。例如,测试 
                ``.emacs'' 程式时,常因测试的过程中,需要将设定做增减的工夫, 
                使用此方法可以随时将测试条件做增减。 
 
 
 
            1.   Ctrl-@(设定要填充字串的起点) 
 
            2.  移动  point至第二个对角处(设定要填充字串的终点) 
 
            3.  键入 Meta-x string-rectangle RET ,此时 echo area 会出现 
 
                       String rectangle: 
 
                利用 minibuffer 键入要填充的字串,即可将字串填入长方形区内。 
                值得注意的是,此时长方形的宽度由字串的宽度来决定, 
                Ctrl-@ 与  point只用来决定长方形的长度。 
 

BBS水木清华站∶精华区