Commit 4599a9a5 authored by Kenichi Handa's avatar Kenichi Handa
Browse files

Reworked.

parent 80a99292
2006-02-17 Kenichi Handa <handa@m17n.org>
* TUTORIAL.translators (TUTORIAL.cn): Update the maintainer.
2006-02-17 Sun Yijiang <sunyijiang@gmail.com>
* TUTORIAL.cn: Reworked.
2006-02-14 Chong Yidong <cyd@stupidchicken.com>
* NEWS: Changes in handling of file local variables.
......
Emacs 快速指南.
Emacs 快速指南(查看版权声明请至本文末尾)
Emacs 指令通常包含有 CONTROL 键(有时候以 CTRL 或 CTL 来标示)或是
META 键(有时候以 EDIT 或 ALT 来标示)。为了避免每一次都要写出其全名,
我们将会使用下述的缩写:
【注意:位于【】之间的内容是译注,比如本行,下同。】
C-<chr> 表示当键入字元 <chr> 时 按住 CONTROL 键。
因此,C-f 就是:按住 CONTROL 键再键入 f 。
M-<chr> 表示当键入字元 <chr> 时 按住 META 或 EDIT 或 ALT 键。
如果没有 META 、 EDIT 或 ALT 键时,则可以用
「按一下 ESC 键然后放开,再键入 <chr> 的步骤」
来作为替代。我们以 <ESC> 来表示 ESC 键。
Emacs 键盘命令通常包含 CONTROL 键(有时候以 CTRL 或 CTL 来标示)和
META 键(有时候用 EDIT 或 ALT 来标示)。为了避免每次都要写出全名,我们
约定使用下述缩写:
重要备忘录:要离开 Emacs 操作阶段( session ),键入 C-x C-c (两个字
元)。位在左侧边界的「>>」字元是让您可以试著使用的指令的提示。举例来说:
<<Blank lines inserted around following line by help-with-tutorial>>
[Middle of page left blank for didactic purposes. Text continues below]
>> 现在键入 C-v ( View next screen )以移到下个萤幕。
(试试看,键入字元 v 时,按住 CONTROL 键)
从现在开始,您应该在每次阅读完目前的萤幕时做一次这个动作。
C-<chr> 表示当输入字符 <chr> 时按住 CONTROL 键。
因此 C-f 就表示:按住 CONTROL 键再输入 f。
要注意的是,当您从一个萤幕移到另一个时,中间会有两行重复;这样做是为了
提供一些连续性,让您可以接续地阅读文字。
M-<chr> 表示当输入字符 <chr> 时按住 META(或 EDIT 或 ALT)键。
如果你的键盘上没有 META 、EDIT 或 ALT 键,用下述方法也等效:
先按一下 ESC 键然后放开,再输入 <chr>。我们用 <ESC> 来表示
ESC 键。
您需要知道的第一件事是如何在文字中移动。您已经知道了可以 C-v 来向前移
动一个萤幕。要向后移动一个萤幕,则键入 M-v (按住 META 键,然后键入 v
,或是如果您没有 META 、 EDIT 或 ALT 键时键入 <ESC>v )。
重要提示:要退出 Emacs,请用 C-x C-c(两个连续的组合键)。下文中左边顶
行的“>>”字样用来提示你尝试键盘命令。比如:
<<Blank lines inserted around following line by help-with-tutorial>>
[本页当中特意留出一些空白是出于教学目的,请继续往后看]
>> 现在输入 C-v (查看下一屏文字)移动到下一屏。
(别紧张,在输入字符 v 的同时注意要按住 CONTROL 键)
从现在开始,每读完当前一屏你都需要这样做一次。
>> 试著键入 M-v 然后 C-v ,连续个几次。
值得注意的是,当你从上一屏滚到下一屏时,中间会有两行的重复;这样做是为
了维持滚屏的连续性,方便你顺畅、连续地阅读。
【现在您可以 C-v 指令移到后面「翻译」一节,以取得关於本文的翻译相关事
项;然后以 M-v 指令回到这里。】
用编辑器,开门第一件事就是学会在文字中移动。你已经知道了 C-v 可以向下移
动一屏,要往上移,请用 M-v (也就是按住 META 键,然后输入v,如果你没有
META、EDIT 或 ALT 键那么就先按 <ESC> 再按 v)。
>> 试试 M-v,然后再试试 C-v,来回遛几次。
* 摘要( SUMMARY )
-------------------
以下的指令在检阅萤幕时相当有用:【我们现在以「萤幕」来表示「显示档案内
容的区域」,因为目前是处在 Emacs 中的单窗格( window )显示状态,如果
是在多窗格的状态下,这里所介绍的指令则作用在「工作中的窗格」。有关於窗
格的介绍,请见窗格( windows )一节。】
* 小结(SUMMARY)
-----------------
C-v 向前移动一个萤幕/窗格
M-v 向后移动一个萤幕/窗格
C-l 清除萤幕/窗格,再重新显示所有文字,
游标所在位置会显示於萤幕/窗格的中央。
(是 CONTROL-L 而不是 CONTROL-1 )
以下命令在翻页浏览时相当有用:
>> 找出游标的位置,并注意其附近的文字为何。然后键入 C-l 。
再次找出游标的位置,确认一下相同的文字现在也位在其附近。
C-v 向前移动一屏
M-v 向后移动一屏
C-l 重绘屏幕,并将光标所在行置于屏幕的中央
(注意是 CONTROL-L,不是 CONTROL-1)
如果您的终端机有 PageUp 与 PageDn 键的话,您也可以使用它们来以萤幕为单
位地移动,但是使用 C-v 和 M-v 会比较有效率
>> 找到光标,留意其附近的文字,然后输入 C-l。
找找光标在哪里,你会发现其附近的文字并没有变化
如果你的键盘上有 PageUp 和 PageDn,也可以用这两个键来滚屏。不过使用
C-v 和 M-v 的效率要更高一些。
* 基本的游标控制( BASIC CURSOR CONTROL )
------------------------------------------
萤幕到萤幕的移动是很有用,但是您如何移动到位於萤幕内文字中的特定位置呢?
* 基本的光标控制(BASIC CURSOR CONTROL)
----------------------------------------
整屏的移动很有用,但是如何在文字中精确定位呢?
有几种方式可以进行。您可以使用方向键,但是将您的手放在标准的〔键盘〕位
置,并且使用指令 C-p 、 C-b 、 C-f 和 C-n 将比较有效率。这些字元和四个
向键〔的功能〕是同等的,如下所示:
有几种方式可以选择。用方向键当然可以,不过更有效率的方法是保持双手位于
主键盘区,然后使用 C-p 、 C-b 、 C-f 和 C-n 这四个命令。它们的功能和方
向键是一样的,如下所示:
一行 C-p
一行 C-p
:
:
移 C-b .... 目前标位置 .... 向移 C-f
移 C-b .... 目前标位置 .... 向移 C-f
:
:
一行 C-n
一行 C-n
>> C-n 或 C-p 将标移到图的中央。
键入 C-l 会看到整个图形显示在幕的中央。
>> C-n 或 C-p 将标移到图的中央。
C-l,整幅图会被显示在幕的中央。
您会发现用字母所代表的意义来记忆它们很容易:P 表示 previous 、 N 表示
next 、 B 表示 backward 、而 F 则表示 forward 。您将「总是」用到这些游
标移动指令
“P N B F”四个字母分别代表了四个词,用这四个词记忆这些组合键会更容易:
P 代表 previous(上一行),N 代表 next(下一行),B 代表 backward(回
退),而 F 则代表 forward(前进)。这些组合键今后将与你形影不离
>> 按几次 C-n 把标往下移动到这
>> 按几次 C-n 把标往下到这
>> 按几次 C-f 往前移到这行,然后再 C-p 往后移动
看看当游标在本行中央时C-p 的动作是怎样
>> C-f 把光标移动到这行,然后再 C-p 往上挪
注意观察当光标在一行的中央时 C-p 命令的行为
每一个文字行都以一个 Newline 字元作为结束,它是用来与下一行作为分别。
在您档案中的最后一行应该要有一个 Newline 来作为结束(但是 Emacs 并不一
定需要它来编辑档案)。
每行文字都以一个“换行符”结束,“换行符”把行与行区分开来。文件的最后
一行也应该也有一个换行符(不过 Emacs 并不强制要求这一点)。
>> 试著在一行开始的地方键入 C-b 。结果应该会移动到前一行的最后面
这是因为它往后移动时越过了 Newline 字元
>> 在一行的行头输入 C-b
光标应该会移动到前一行的行尾,因为光标在回退过程中越过了换行符
C-f 也可以和 C-b 一样地越过 Newline 字元。【Newline 字元是「不可见
( invisible )字元」,在编辑器中一般看不到它,这里只是告诉您:在行首
再往前走,那么游标会跑到前一行(如果有前一行的话);在行尾再往后走,那
么游标会跑到后一行(如果有后一行的话)。「越过 Newline 字元」会让游标
跑到另外一行。】
同样 C-f 也可以像 C-b 一样越过换行符。
>> 按几次 C-b,自己感觉一下游标在哪
然后按几次 C-f 回到行的尾
再按一次 C-f 就可以移到下一行
>> 按几次 C-b,感受一下光标的移动
然后按几次 C-f 回到行的尾。
再按一次 C-f,光标会移动到下一行。
移动标穿越幕的上方或下方时,在边界外的文字会移位进入萤幕内。这
称为「卷动」。它让 Emacs 可以将游标移动到文字中的任意特定位置,同时
(游标)不会跑出萤幕外
移动标穿越幕的上下边界时,在边界外的文字会移动到屏幕内,这称为
“滚动”(scrolling)。滚动使得光标可以被移动到文字中的任何位置,并且还
不会让光标跑到屏幕外边去
>> 试著以 C-n 将游标越过萤幕下方,然后看看发生了什么
>> C-n 将光标下移,一直越过屏幕边界,同时观察发生了什么变化
如果一个字一个字元地移动太慢的话,您可以一个一个字地移动。M-f
(META-f) 往前移动一个字,M-b 则往后移动一个字。【对中文来说,则是移动
到下一个或下一个标点符号的所在。】
如果你嫌一个字一个字符地挪光标太慢,你还可以一个一个词地跳。M-f
(META-f) 可以将光标往前移动一个词,而 M-b 则往后移。【这里的“词”指
英文单词,对中文来说,则是指移动到下一个标点符号。】
>> 键入一些 M-f 和 M-b。
>> 试试 M-f 和 M-b。
当您在一个的中间,M-f 会移动到这个字的尾巴。当您在字与字间的空白时,
M-f 会移动到下一个字的尾巴。M-b 的效果相似,只是方向不同
如果光标停在一个的中间,M-f 会移动到这个词的末尾。如果光标处于词与词
之间的空白处,M-f 会移动到下一个词的末尾。M-b 的功能类似,只是方向相反
>> 按几次 M-f 和 M-b,中间夹杂一些 C-f 和 C-b,
这样子您就可以观察 M-f 和 M-b 在各种「位在字间或字元间」
的不同位置,所表现出来的行为。
>> 按几次 M-f 和 M-b,中间夹杂一些 C-f 和 C-b。
你可以观察到 M-f 和 M-b 在不同位置上所表现出来的不同行为。
请注意 C-f 、 C-b 和 M-f 、 M-b 两对之间的相似性。「经常」的状况是:
META 字元是用来作为与「以语言定义出的单位(字、句子、段落)」有关的操
作,而 CONTROL 字元则是作用在「与您所编辑无关的『基本』单位(字元或行
等)」上。
请注意 C-f 、C-b 和 M-f 、M-b 两对之间的类比关系。通常的惯例是:META 系
列组合键用来操作“由语言定义的单位(比如词、句子、段落)”,而 CONTROL
系列组合键用来操作“与语言无关的基本单位(比如字符、行等等)”。
这个相似性在「行与句子」之间也同样适用:C-a 和 C-e 会将游标移动到「一
行」的 开始和结尾处,而M-a 和 M-e 则将游标移动到「一句」的 开始和结尾
处。
类似的惯例在“行”与“句子”之间也同样适用:C-a 和 C-e 可以将光标移动到
“一行”的头部和尾部;而 M-a 和 M-e 则将光标移动到“一句”的头部和尾部。
>> 试著按两次 C-a,再按两次 C-e。
试著按两次 M-a,再按两次 M-e。
>> 按两次 C-a,再按两次 C-e。
按两次 M-a,再按两次 M-e。
看一下为什么重复的 C-a 指令会没有作用,而重复的 M-a 指令则继续移动到下
一个句子。虽然这并不能说是完全类比,但是其中每个指令的行为看起来都十分
自然。
想一想为什么重复的 C-a 命令会没有作用,而重复的 M-a 命令则会让光标不断
地回退到上一个句子。虽然这个类比规律并不严格,但是很自然。
游标在文字中的位置也可以称作点位( point )」。简单来说就是:游标表
现出萤幕中「点位」所在的文字位置。
光标停留的位置也可以称作点位(point)。或者干脆说,光标指示出了屏幕
上“点位”在文本中的位置。
这里是一些简单「游标移动( cursor-moving )操作」的整理,其中也包括了
「字和句」的移动指令:
这里对简单的光标移动命令做一个总结,其中也包括了整词和整句的移动:
C-f 往前移动一个字
C-b 往回移动一个字
C-f 向右移动一个字
C-b 向左移动一个字
M-f 往前移动一个【中文是移动到下一个标点符号】
M-b 往回移动一个【中文是移动到上一个标点符号】
M-f 向右移动一个【中文是移动到下一个标点符号】
M-b 向左移动一个【中文是移动到上一个标点符号】
C-n 移动到下一行
C-p 移动到上一行
......@@ -152,906 +138,852 @@ META
C-a 移动到行首
C-e 移动到行尾
M-a 移句首
M-e 移到句尾
M-a 移动到句首
M-e 移到句尾
>> 练习几次这些指令。这些都是最常使用到的指令。
>> 把上面所有的命令都练习几次,这些都是最常用的命令。
还有两个重要的游标动作( cursor-motion )指令,M-< META Less-than ),
移动到文字的最开始,以及M-> META Greater-than ),移动到文字的最
这里还要介绍两个重要的光标移动命令:M-< META 小于号)可以将光标移动到
所有文字的最开头;M-> META 大于号)可以将光标移动到所有文字的最末尾
在大部份的终端机,「<」是在 comma 上方,所以您必须要使用 shift 键来键
入。在这些终端机上,您必须使shift 键来入 M-<;没有使用 shift 键,
您就变成键入 M-comma 了
注意,在大部分键盘上,小于号(<)需要用上档键(Shift)来输入,所以在这
些键盘上你应该Shift 键来入 M-<,如果不按 Shift 键,你输入的会是
M-comma(META 逗号)
>> 现在试一 M-< ,移到本快速指南的最开始。
然后再重复地使用 C-v 回到这里。
>> 试一 M-< ,移到本快速指南的最开始。
然后再按几次 C-v 回到这里。
>> 现在试一 M-> ,移到本快速指南的最
然后再重复地使用 M-v 回到这里。
>> 试一 M-> ,移到本快速指南的最末尾
然后再按几次 M-v 回到这里。
如果您的终端机有方向键的话,也可以用方向键移动标。我们有三个理由
议您学习 C-b 、 C-f 、 C-n 、 和 C-p :(1) 任何的终端机都能使用。(2)
一旦您使用 Emacs 相当熟练了,您会发现键入这些 CONTROL 字元,比起使用方
向键快多了(因为您不需要将手移开打字区)。(3) 一旦您使用这些 CONTROL
字元指令成为习惯,您也可以很容易地学会其他进阶的游标动作指令。
如果你的键盘上有方向键的话,也可以用它们来移动标。不过我们有三个理由
推荐你学习 C-b 、C-f 、C-n 、和 C-p:(1)它们在任何键盘上都能用。(2)
当你熟练使用 Emacs 之后,你会发现用这些组合键比用方向键要快得多,因为你
的手不需要离开打字区。(3)一旦你习惯了使用这些组合键,你也可以很容易地
适应其它更高级的光标移动命令。
大部的 Emacs 令接受数字参数;对大部份的指令而言,它的作用是指定重
复次数。您要指定一个指令的重复次数的作法是:先键入 C-u,然后在您键入指
令前,键入代表重复次数的数位。如果您有一个 META(或 EDIT 或 ALT )键,
那么还有另外一个替代作法来输入数字参数:按住 META 键时打入这数字。
们建议您学习 C-u 的方法,因为它在任何终端机都可以使用。此一数字参数也
称作为「字首参数」,因为您在这参数所作用到的指令前键入它
大部的 Emacs 令接受数字参数,并且对于多数命令而言,这些数字参数的作
用是指定命令的重复次数。为一个命令指定数字参数(也就是重复次数)的方法
是:先输入 C-u,然后输入数字作为参数,最后再输入命令。如果你有META (或
EDIT 或 ALT)键,那么还有另一种办法:按住 META 键不动,然后输入数字。
过我们还是建议你用 C-u,因为它在任何终端机上都能用。这种数字参数也称为
“前缀参数”,意思是说这个参数是先于使用它的命令而输入的
举例来说, C-u 8 C-f 向前移动 8 个字
举例来说, C-u 8 C-f 向前移动 8 个字
>> 试著以一个数字参数来使用 C-n 或 C-p
只一个指令就将游标移动到这行的附近。
>> C-n 或 C-p 指定一个数字参数,这样你可以只用一个命令就把光标移动
到本行的附近。
大部份的指令使用数字参数来作为其重复次数,但是其中有些指令则是作为其他
用途。有几个指令(目前您尚未学到)将它作为旗标 -- 以一个字首参数的型态
出现,不管其值为何,它们让这指令做些不一样的事
虽然大部分命令用数字参数来作为其重复次数,但是也有些命令例外,它们将数
字参数另做它用。比如有些命令(目前还没学到)仅仅将前缀参数作为一个标
志——只要有一个前缀参数出现,不管其值为何,命令的功能都会改变
C-v 和 M-v 则是另一类的例外。当给定一个参数时,它们卷动「所指定的数量
的行(以行为单位)」,而不是以「萤幕」为单位卷动。举例来说,C-u 8 C-v
将显示萤幕卷动 8
C-v 和 M-v 则属于另一种类型的例外。当给定一个参数时,它们将滚动你指
定的“行数”,而不是“屏数”。举例来说,C-u 8 C-v 将屏幕向下滚动 8 行,
而不是 8
>> 现在试著键入 C-u 8 C-v。
>> 现在试试看,输入 C-u 8 C-v。
令应该已经将萤幕向上移了 8 行。若您想将它再次地向下动,您可以在
执行 M-v 时给定一个参数
个命令应该已经将文字向上滚动了 8 行。如果你想将它再次地向下动,你可
以给定一个参数然后执行 M-v
如果您正在使用 X 窗口系统,在 Emacs 窗口左手侧应该有一个称为「卷动轴」
的长方型区域。您可以用滑鼠在卷动轴按一下来卷动文字。
如果你正在使用一个窗口系统,比如 X11 或者微软的 Windows,那么在 Emacs
窗口的左边或者右边应该有一个长方形的区域叫“滚动条”,你可以用鼠标操纵
滚动条来滚动文字。
>> 试著在「卷动轴内反白区域上」压一下中间钮。这应该会将文字卷动到
「由您所按一下滑鼠的地方」所决定的位置。
>> 试着在“滚动条内的反白区域”上按一下鼠标中键。
文字应该会滚动到鼠标所指示的位置。
>> 当按住中间时,试著将滑鼠上下移动。
您会看到文字随著您移动滑鼠而上下移动。
>> 当按住中键时,试着将鼠标上下移动。
你会看到文字随着鼠标的移动而上下滚动。
【Windows 版本符合 Windows 程序的传统操作习惯,上述操作不适用。】
* EMACS 发呆时( WHEN EMACS IS HUNG
-----------------------------------------
* EMACS 失去响应的时候(WHEN EMACS IS HUNG)
-----------------------------------------------
如果 Emacs 停止回应您的指令,您可以键入 C-g 来安全地停止它。您也可以使
C-g 来停止执行过久的令。
如果 Emacs 对你的命令失去响应,你可以很安全地用 C-g 来终止这个命令。
C-g 也可以被用来终止一个执行过久的令。
您也可以使用 C-g 来取消数字参数或您不想要完成的指令。
C-g 还可以被来取消数字参数和那些输入到一半的命令。
>> 键入 C-u 100 以设定一个 100 的数字参数,然后键入 C-g。
现在键入 C-f。它应该只会移动一个字元,因为您已经以 C-g
取消了参数。
>> 输入 C-u 100 设定一个值为 100 的数字参数,然后按 C-g。
现在再按 C-f,光标应该只会移动一个字符,因为你已经用 C-g 取消了参数。
如果您已经不小心地键入一个 <ESC>,您可以 C-g 来取消它。
如果你不小心按了一下 <ESC>,你也可以用 C-g 来取消它。
【这个说法似乎有问题,因为按照这个按键顺序输入的应该是 C-M-g。
取消<ESC> 的正确做法是再连按两次 <ESC>。】
* 无效化的指令( DISABLED COMMANDS
-------------------------------------
* 被禁用的命令(DISABLED COMMANDS)
-----------------------------------
有一些 Emacs 指令被「无效化」了,因此初学者不会意外地使用到它们。
有一些 Emacs 命令被“禁用”了,以避免初学者在不了解其确切功能的情况下误
用这些命令,造成麻烦。
如果您键入了某一个无效化的指令,Emacs 会显示一个讯息,说明这个指令是什
么,并且询问是否要继续,然后执行这令。
如果你用到了一个被禁用的命令,Emacs 会显示一个提示消息,告诉你这个命令
到底是干什么的,询问是否要继续,并在得到你的肯定之后再执行这令。
如果您真的想要试一下这个指令,那么在 Emacs 询问您时,请键入空白。一
来说,如果不想执行这个无效化的指令,请以『n』来回答它
你要是真的想执行被禁用的命令,那么在 Emacs 询问你的时候应该按空格。一
来说,如果不想执行,按“n”就行了
>> 键入 C-x C-l (这是个无效化的指令)
然后键入 n 来回答问题。
>> 试试 C-x C-l (这是一个被禁用的命令)
然后 n 来回答问题。
* 窗格( WINDOWS
-------------------
* 窗格(WINDOWS)
-----------------
Emacs 可以有数个窗格,每一个显示它自己的文字。我们在稍后会解释如何使用
多重窗格。现在我们想要解释如何除去多余的窗格,然后回到基本的单窗格编辑。
它很简单:
Emacs 可以有多个窗格,每个窗格都显示不同的文字。我们后面再介绍怎么对付
多个窗格,现在先让我们先搞明白如何关掉多余的窗格。其实也很简单:
C-x 1 One window (即,除去其他所有的窗格)。
C-x 1 只保留一个窗格(也就是关掉其他所有的窗格)。
那是个 CONTROL-x 后面跟著数字 1 。C-x 1 将含有游标的窗格扩大到整个萤幕。
它将所有其的窗格除去
也就是先按 CONTROL-x 然后再按 1。C-x 1 会保留光标所在的窗格,并将其扩大
到整个屏幕,同时关掉所有其的窗格。
>> 移动游标到本行并且键入 C-u 0 C-l。
>> 键入 CONTROL-h k CONTROL-f。
看看这个窗格在当一个新的窗格出现
(以显示有关 CONTROL-f 指令的文档时),它是如何缩小的。
>> 把光标移到本行然后输入 C-u 0 C-l。
>> 键入 C-x 1 以使文档列表窗格消失。
>> 输入 CONTROL-h k CONTROL-f。观察当一个新窗格出现时当前窗格(用来显示
CONTROL-f 命令的文档)是如何缩小的。
这个指令并不像您先前所学过的指令那般,它包括了两个字元。它是以字元
CONTROL-x 作为开始。有一整个系列的指令是以 CONTROL-x 作为开始;它们之
中有许多是与「窗格、档案、暂存区以及相关事物」有关的。这些指令有 2 、
3 或 4 个字元长。
>> 输入 C-x 1 关掉文档窗格。
这个命令跟先前学到的命令不太一样,因为它包含了两个字符,以 CONTROL-x 开
始。有一系列命令都是以 CONTROL-x 开始的,这些命令许多都跟“窗格、文件、
缓冲区【缓冲区(buffer)会在后文详细介绍】”等等诸如此类的东西有关,其
中有些命令可能有 2 个、3 个或者 4 个字符长。
* 插入与删除( INSERTING AND DELETING )
----------------------------------------
如果您想要插入文字,把它键入就是了。您可以看到的字元,像是 A 、 7 、 *
等,被 Emacs 视为文字并且可以直接插入。键入 <Return>
( carriage-return 键)以插入一个 Newline 字元。
* 插入与删除(INSERTING AND DELETING)
--------------------------------------
您可以键入 <Delback> 以删除您最后键入的字元。<Delback> 是一个的键盘键
-- 就是您通常在 Emacs 外,使用来「删除您最后键入字元」的同一个。一般来
说是个在 <Return> 上方数行的大键,通常标示为『Delete』、『Del』或
『Backspace』。
插入文字很简单,敲键盘就行了。你能看到的字符,比如 A、7、* 等等,都被
Emacs 视为文字并且可以直接插入。敲 <Return>(回车键)会插入一个换行符。
如果在那里有个标示为『Backspace』的大键,那么那一个就是您使用来作为
<Delback> 的键了。某个地方可能也会有另一个标示为『Delete』的键,但那个
并不是 <Delback>
你可以用 <Delback> 来删除最后输入的的一个字符,这个跟你在 Emacs 之外的
用法应该一样。一般来说 <Delback> 就是位于 <Return> 键上方某处的一个大号
键,通常被标示为“Delete”、“Del”或者“Backspace”
更一般地说, <Delback> 将位於目前游标位置前一个字元加以删除。
如果你找到了标着“Backspace”的键,那么它应该就是 <Delback>;即便你又在
键盘其它地方找到了一个标示为“Del”的键,那么它也应该不是 <Delback>。
>> 现在做 -- 键入一些字元,然后键入几次 <Delback> 来删除它们。
不要担心这个档案会被更动;您不会影响到原来的快速指南。
(您现在看到的)这一个是您的个人拷贝。
一种更通用的说法是,<Delback> 将位于光标前的一个字符删除。
当一行文字变得比「在窗格中的一行」长时,这一行文字会「接续」到第二行窗
格行。这时一个反斜线「\」(或如果您使用窗口化的显示,则是一个小小弯弯
的箭头)会位在其右边界以指出此行接续著。
>> 现在就试试——敲点字,然后按几下 <Delback> 删除它们。
不用担心你会修改文件,你干什么都没关系,这里就是专给你练习用的。
>> 插入文字,一直到您达到右边界,然后再继续插入。
您会看到一个接续行出现。
如果一行文字很长、超出了窗格的宽度,显示不下的部分会在紧邻的下一行继续
显示。这时会有一个反斜线(控制台下是反斜线,如果你用图形窗口系统,则应
该是一个小小的转弯箭头)显示在右边沿,表明这是某一行的接续显示。
>> 使用 <Delback> 删除一些文字,直到此行再次成为一个窗格行。
接续行消失了。
>> 输入文字,一直到屏幕的右边界,然后继续,你会看到一个接续行出现。
您可以像删除其他字元一样地删除 Newline 字元。将位在两行中的 Newline 字
元删除会让它们合并成为一行。如果合并的结果使这一行太长,以致无法符合窗
格的宽度,它会以一个接续行来显示。
>> 用 <Delback> 删掉一些文字,直到此行长度小于窗格宽度,接续行就消失了。
>> 移动游标到本行的开头并键入 <Delback>。
这会将本行与其前一行结合为一行。
你可以像删除其他字符一样删除换行符。删除两行中间的换行符会将两行合并成
一行。如果合并的结果使这一行太长,超出了窗格的宽度,它就会以一个接续行
来显示。
>> 键入 <Return> 以重新插入您刚才删除的 Newline 字元。
>> 移动光标到本行的开头并输入 <Delback>。
这时本行与其前一行将被合并为一行。
记得大部份的 Emacs 指令都可以给予一个重复计数( repeat count );这也
包括了文字字元。重复一个文字字元会将它插入数次。
>> 输入 <Return> 重新插入你刚才删除的换行符。
>> 现在就试一下 -- 键入 C-u 8 * 以插入 ********。
前面说过,大部分的 Emacs 命令都可以指定重复次数,这其中也包括输入字符的
命令。重复执行输入字符的命令实际上就是输入多个一样的字符。
您现在已经学到了「键入个什么东西进 Emacs 以及修正错误」的大部份基本方
法。您也可以「以字或行为单位」地删除。这里有份关於「删除操作」的摘要:
>> 试试 C-u 8 *,这将会插入 ********。
<Delback> 删除游标所在的 前一个字元
C-d 删除游标所在的 后一个字元
好,现在你应该已经掌握了最基本的的文本插入和修改功能,其实删除还可以
“以词为单位”进行,下面是一个关于“删除”操作的小结:
M-<Delback> 删除游标所在的 前一个字
M-d 删除游标所在的 后一个字
<Delback> 删除光标前的一个字
C-d 删除光标后的一个字
C-k 删除从游标所在到「行尾」间的字元
M-k 删除从游标所在到「句尾」间的字元
M-<Delback> 移除光标前的一个词
M-d 移除光标后的一个词
注意「<Delback> 和 C-d」还有「M-<Delback> 和 M-d」是平行地自 C-f 和
M-f 扩充出来的(嗯,<Delback> 并不是控制字元,但是没什么好担心的)。
C-k 和 M-k 在某种程度上与 C-e 和 M-e 一样,如果把「一行」和「一句」作
为类比的话。
C-k 移除从光标到“行尾”间的字符
M-k 移除从光标到“句尾”间的字符
您也可以只以一种方法来删除缓冲区内的任何部份,先移动到您想要删除的部份
的一端,然后键入 C-@ 或 C-SPC (任一个即可)。( SPC 指的是 Space Bar
)再移到那部份的另一端,接著键入 C-w 。这样就会把介於这两个位置间的所
有文字删除。
【可能你已经注意到了“删除(delete)”和“移除(kill)”的用词区别,后
文会有详细说明。】
>> 移动游标到上一段开头的「您」字。
>> 键入 C-SPC 。 Emacs 应该会在萤幕的下方显示一个「Mark set」讯息。
>> 移动游标到第二行中的「端」字。
>> 键入 C-w 。这样会把从「您」开始到刚好「端」之前的文字删除
注意“<Delback> 和 C-d”还有“M-<Delback> 和 M-d”是根据前述惯例从 C-f
和 M-f 衍生出来的(其实<Delback>不是控制字符,我们先忽略这一点)。C-k
和 M-k 的关系在某种程度上与 C-e 和 M-e 一样——如果把“一行”和“一句”
作一个类比的话
要注意的是「杀掉( killing )」和「删除( deleting )」的不同在於被杀
掉的可以拉回,而被删除的则不能。【有点难以理解,您可以这么想:(1)「被
杀掉的」尚存尸骨,而「被删除的」则尸骨无存了!可见得对电脑资料来说,
「删除」比「杀掉」严重多了。(2)实际上,就算被删除了,我们还是有技术可
以把它救回来,尤其是文字资料,前提是删除后不能进行实体记忆体的格式化动
作。但这对於一般使用者而言是不可能的,因此就不考虑这情形了。】重新插入
被杀掉的文字称为「拉回( yanking )」。一般而言,可以移除掉很多文字的
指令会把那些文字储存起来(它们设定成您可以将文字拉回),而那些只是删除
一个字元或者只是除去空白行或空白的指令,则不会储存这些被删除的文字(因
此您不能将那文字拉回)。
你也可以用一种统一的办法来移除缓冲区里的任何一部分:首先把光标移动到你
想要移除的区域的一端,然后按 C-@ 或 C-SPC(任一即可,SPC指空格)【注意,
C-SPC 往往被中文用户设定成输入法热键,如果这样,C-SPC 就被系统拦截而无
法输入给 Emacs 了,因此这里还是推荐使用C-@。】,然后再移动到另一端,再
按 C-w 就可以把位于这两点之间的所有文字移除了。
>> 移动游标到一非空白行的开始。
然后键入 C-k 杀掉在那一行上的文字。
>> 第二次键入 C-k。您将会看到它杀掉跟在那一行后面的 Newline 字元。
>> 移动光标到上一段开头的“你”字。
>> 输入 C-@ 。Emacs 应该会在屏幕的下方显示一个“Mark set”的消息。
>> 移动光标到第二行中的“端”字。
>> 输入 C-w,就会把从“你”开始到“端”之前的文字全部移除。
请注意单独的 C-k 会把一行的内容杀掉,而第二个 C-k 则会杀掉那一行本身,
并且使得所有其他的行向上移动。C-k 以很特别的方式来处理数字参数,它会杀
掉很多行以及它们的内容,这不仅仅是重复而已,C-u 2 C-k 会把两行以及它们
的 Newline 字元杀掉;如果只是键入 C-k 两次并不会这样。
注意,“移除(kill)”和“删除(delete)”的不同在于被移除的东西可以找回
来,而被删除的就不行了。【实际上,移除掉的东西虽然看起来“消失”了,但
实际上被 Emacs 记录了下来,因此还可以找回来;而删除掉的东西虽然也可能还
在内存里,但是已经被Emacs“抛弃”了,所以就找不回来了。】重新插入被移除
的文字称为“召回(yank)”。一般而言,那些会去除很多文字的命令会把去除
掉的文字储存起来(它们被设定成了“可召回”),而那些只是去除一个字符或
者只是去除空白的命令就不会储存那些被去除掉的东西(因此你就无法召回)。
将被杀掉的文字回复的动作称为「拉回( yanking )」。(把它想像成您把别
人从您身上夺去的东西猛力地拉回来)您可以在您删除文字的地方拉回,也可以
在文字的其他地方拉回。您可以拉回数次同样的文字,以制作它的数份拷贝。
>> 移动光标到一非空白行的行头,然后输入 C-k 移除那一行上的文字。
拉回的指令为 C-y。它会在目前游标的位置重新插入最后杀掉的文字
>> 再次 C-k,你可以看到它移除了跟在那一行后面的换行符
>> 试试看;键入 C-y 将文字拉回。
注意,单独的 C-k 会把一行的内容移除,而第二个 C-k 则会移除换行符,并使
其后所有的行都向上移动。C-k 处理数字参数的方式很特别,它会把参数指定的
那么多行连同其后的换行符一起移除,而不仅仅是重复 C-k 而已。比如 C-u 2
C-k 会把两行以及它们的换行符移除;而如果只是输入 C-k 两次显然不是这个结
果。
如果您连续地做了数次 C-k,所有被杀掉的文字都会被储存在一起,因此做一次
C-y 就会把所有这些行都拉回来。
将被移除的文字恢复的动作称为“召回(yanking)”。(就好像你把别人从你身
边移走的东西又猛力地拉回来。)你可以在你删除文字的地方召回,也可以在别
的地方召回,还可以多次召回同样的文字以得到它的多个拷贝。
>> 现在做一下,键入 C-k 数次
召回的命令是 C-y。它会在光标所在处插入你最后移除的文字
现在要回复那些杀掉的文字:
>> 试试看,输入 C-y 将文字召回。
>> 键入 C-y。然后把游标往下移动个几行,再一次键入 C-y。
您现在知道如何复制某些文字了
如果你一次连按了好几下 C-k,那么所有被移除的行会被存储在一起,只要一个
C-y 就可以把它们都召回
如果您有一些文字想要拉回来,但是后来您又杀了某些东西,那么该怎么做呢?
C-y 会把最近杀掉的拉回来,但是先前的文字并没有消失,您可以用 M-y 来回
到它。当您已经使用 C-y 把最近杀掉的拉回来之后,再键入 M-y 来把这些拉回
来的文字替换为先前所杀掉的。一次又一次地键入 M-y 会把先前再先前所杀掉
的文字带回来。当您到了您想找的文字时,您不需要做任何事来保存它,只要继
续您的编辑,把这些已拉回的文字留在那里就好。
>> 在这里试试,连续按几次 C-k。
如果您 M-y 做了很多次,您可能会回到起始点,也就是最近杀掉的。
现在再来恢复刚刚被我们移除的文字:
>> 杀掉一行,到处绕绕,再杀掉另一行。
然后用 C-y 将第二次杀掉的那行带回来。
然后再用 M-y,它将会被第一次杀掉的那行取代。
再做几次 M-y 看看您会得到什么。
不间断地做,直到第二个杀掉行回来,再做个几次。
如果您想的话,您可以试著给 M-y 正的或是负的参数。
>> 按 C-y。然后把光标往下移动几行,再按一次 C-y。</