BBS水木清华站∶精华区

 
文件的删减 
 
     修改文件不外乎将原有的文件删除後,再加入新的内容; 
     或将现有的资料做重新的排列组合。现先讨论文件的删除部份, 
     文件的重组就留待 5.4 节再进行讨论。 
          EMACS 中的删除有两种形式,一种是指文件的 killing, 
     另一种则指文件的deletion。在 EMACS 中所谓的 killing 
     是指将文件从目前的缓冲区移到一个称为kill-ring 
      kill-ring 为一个变数的地方去。文件在缓冲区中是消失了, 
     但却储存在  kill-ring ,variable这一个变数中。 
     EMACS 可以有许多的缓冲区,但却只有一个 kill-ring 的储存变数。 
     也就是说,多个缓冲区彼此共享一个  kill-ring,而且也只有一个 
     kill-ring。 
     EMACS 所设计共享的  killing-ring 的用意是让被遗弃的文件可以找回, 
     而且各缓冲区彼此也可借由  killing-ring 来建立一个互通的管道。 
     所谓的互通就是把甲缓冲区的东西给乙,反之,也可把乙缓冲区的 
     东西给甲。此模式在 EMACS 中就是透过  killing-ring 来完成。 
     因此,想从甲缓冲区中得到某些文件给乙缓冲区,只要将 
     甲缓冲区的文件放入  kill-ring 中,乙缓冲区就可以至此共享的 
     kill-ring 中将文件取出。如此一来,就可以共享资源了。 
          另一种模式的删除,在 EMACS 中称为  deletion。此种删除, 
     并不将删除後的资料放入  kill-ring 中,而是将删除的文件遗弃。 
     此种情形的删除是无法失物复得的。 
     以  deletion 删除的资料,可以键入 
 
     Ctrl-x u(undo) 
     来找回。使用一次 `` Ctrl-x u,恢复前一个指令的景象; 
     使用二次  Ctrl-x u,则恢复前二个指令的容貌,如此周而复始 
     的使用  Ctrl-x u ,可恢复更改前的全貌。至於 `` Ctrl-x u'' 更详细的 
     说明会在 5.5 节进一步讨论。 
          前已说过,不放入  kill-ring 的指令称为  deletion 的指令。 
     EMACS 删除字元、空白字元以及空白列的指令都不放入  kill-ring 
     中的。具体说来就是,  Ctrl-d、 DEL、  Meta-\、 Meta-SPC 与 
      Ctrl-x Ctrl-o 等指令。 现就为各位说明这些指令。 
 
          文件的修改不是重组资料就是删减与新增资料,新增资料已 
     论述过了,而重组资料即将在 5.4 节登埸,现在就开始谈文件的删减 
     。删除文件也不外乎删除一个字元、一个字、一行或一个区块; 
     删除的方向可以选择左右删除的方式。现在就来看看如何以 
     EMACS 所提供的指令,来做删除的工作。此处将删减的指令分成 
     deletion 和  killing而大类。 
 
        o  属於  deletion 的指令集 
 
 
 
             +  删除「字元」(character)的方法 
 
 
 
                  +   Ctrl-d(delete-char) 
                             删除  point 所在位置的字元。 
 
                  +   DEL(delete-backward-char) 
                             删除  point 之前的字元。 
                             此指令与  Ctrl-d 为最基本的删除指令,只要耐心够,任何 
                             的删除都可以此二个指令完成。 
 
 
 
             +  删除  spaces 和  tabs 的方法 
 
 
 
                  +   Meta-\(delete-horizontal-space) 
                           输入资料时,常会不自觉的输入无意的空白(space)和 tab 。 
                           当合并上下列而为一列时,也常会出现 space 或 tab 从中作梗。 
                          为此 EMACS 提供了  Meta-\ 的指令,让使用者可以很容易 
                          将不必要的 space 和 tab 删除。当然其它的删除指令,也可以 
                          将不需要的 space 和 tab 删除,此指令只是更方便删除 space 
                          和 tab 而已。 
                          Meta-\ 可删除 point 前後所有的 space 和 tab 。 
                          例如:abc def       g,此时的游标在 f 与 g 之间。 
                          键入了 Meta-\ 其结果如下所示: 
 
                          abc defg 
 
 
                  +   Meta-SPC(just-one-space) 
                          删除  point 前後的 space 和 tab 时,若希望留下一个 
                          space 或 tab 做为彼此的分隔,就必须使用 `` Meta-SPC'' 来完成了。 
                          例如:abc def       g,此时的游标在 f 与 g 之间。 
                          键入了  `` Meta-SPC 其结果如下所示: 
 
                          abc def g 
 
 
 
 
 
        o  属於  killing的指令 
 
 
 
             +  删除「字」(word)的方法 
 
 
 
                  +   Meta-d(kill-word) 
                           此指令往前(右)删除  point 所在位置的字。 
                           其所删除字的□围端赖  point 所在的位置而有不同。 
                           若point 
                           在一个字的第一个字元,则会删除此字;若  point 在此字的 
                           其它位置,则删除  point 所在位置及其之後的所有字元,包括 
                           point 所在位 
                           置的字元。 
                           例(一): This is a test. 游标若在 test 这个字的 
                           t 处,使用此指令的结果如下: 
 
                           This is a . 
 
                           例(二): This is a test. 游标若在 test 这个字的 
                           e 处,使用此指令的结果如下: 
 
                           This is a t. 
 
                           若想删除一个以上的字,可以使用 numeric argument 。 
 
                  +   Meta-DEL(backward-kill-word) 
                           此指令往回删除  point 所在位置的字。 
                           其所删除字的□围端赖  point 所在的位置而有不同。 
                           若  point 在一个字的第一个字元,则会删除此字之前的字; 
                           若  point 在此字的其它位置,则删除  point 
                           之前的所有字元,但不包括  point 所在 
                           位置的字元。 
                           例(一): This is a test. 游标若在 test 这个字的 
                           t 处,使用此指令的结果如下: 
 
                           This is test. 
 
                           例(二): This is a test. 游标若在 test 这个字的 
                           e 处,使用此指令的结果如下: 
 
                           This is a est. 
 
                           同样的,回想一下 numeric argument 吧。 
 
 
 
             +  删除列的方法 
 
 
 
                  +   Ctrl-k(kill-line) 
                         删除列的指令。所删除列的□围,以  point 所在的位置为 
                         准则, 
                         以  point 所在位置为起始点,以此列的结束为终点。 
                         被删除掉的文件会在视窗上留下一空白,若想将空白列也一并删除, 
                         必需再使用一次  Ctrl-k。此时的  Ctrl-k 是用来删除换列指令 
                         的控制码。 
 
                  +   Ctrl-x Ctrl-o(delete-blank-lines) 
                         编辑的过程中会不经意的加入许多空白列,此种情形常发生在 
                         缓冲区的最尾端。每按下一个 RET ,就输入了一个新列,但在缓冲区 
                         的尾端按下 RET ,此时所加入的新列并不易为人查觉。此指令可以 
                         将point所在位置「前後」的空白列删除只留下一列。当然并非 
                         一定要以此指令来删除空白,  Ctrl-k 自然也可以用来删除空白列, 
                         也可以将空白列以删除区块的方式删除之,提供此指令只是方便满足 
                         使用者的需求而已。 
 
 
 
             +  删除区块的方法 
 
                     *Ctrl-w (Kill-region) 
                         EMACS 允许删除某一特定的区块。要删除区块,必需先标示区块, 
                         此标示的动作称为  mark\。如何标示区块,就是下一节的主题。 
 
 
 
 
          EMACS 对於被  killing而删除的资料,都是放在 kill-ring 中。 
      kill-ring 其实只是一个变数而已,所有  killing删除掉的文件, 
     就是此变数的值。其已述及查阅变数值的方法,现不厌其烦的再论述一次: 
 
       1.  键入 ``Ctrl-h v'' 後, echo area 处会出现: 
       2.  在 Describe variable:後输入变数的名称, EMACS 会另开一个 
               视窗来显示此变数的值。此时所要键入的变数名为 ``kill-ring'' 
 
     此节讨论 EMACS 编辑的基本指令,有了这些指令之後,编辑的工作 
     就不是难事了。接下来各节则讨论其它的编辑功能。 
 

BBS水木清华站∶精华区