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水木清华站∶精华区