2007年4月30日星期一

Emacs 快速指南中文译本 (最新、推荐) brep (转寄)

发信人: crazycool (上), 信区: Emacs
标 题: Emacs 快速指南中文译本 (RC2)
发信站: 水木社区 (Wed Feb 15 19:24:37 2006), 站内

应该是最后一个版本了,大家看看还有没有意见和建议,没有我就交货了 : )

--------------------------------------------------------------------------

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,请用 C-x C-c(两个连续的组合键)。下文中左边顶
行的">>"字样用来提示你尝试键盘命令。比如:
<<Blank lines inserted around following line by help-with-tutorial>>
[本页当中特意留出一些空白是出于教学目的,请继续往后看]
>> 现在输入 C-v (查看下一屏文字)移动到下一屏。
(别紧张,在输入字符 v 的同时注意要按住 CONTROL 键)
从现在开始,每读完当前一屏你都需要这样做一次。

值得注意的是,当你从上一屏滚到下一屏时,中间会有两行的重复;这样做是为
了维持滚屏的连续性,方便你顺畅、连续地阅读。

用编辑器,开门第一件事就是学会在文字中移动。你已经知道了 C-v 可以向下移
动一屏,要往上移,请用 M-v (也就是按住 META 键,然后输入v,如果你没有
META、EDIT 或 ALT 键那么就先按 <ESC> 再按 v)。

>> 试试 M-v,然后再试试 C-v,来回遛几次。


* 小结(SUMMARY)
-----------------

以下命令在翻页浏览时相当有用:

C-v 向前移动一屏
M-v 向后移动一屏
C-l 重绘屏幕,并将光标所在行置于屏幕的中央
(注意是 CONTROL-L,不是 CONTROL-1)

>> 找到光标,留意其附近的文字,然后输入 C-l。
找找光标在哪里,你会发现其附近的文字并没有变化。

如果你的键盘上有 PageUp 和 PageDn,也可以用这两个键来滚屏。不过使用
C-v 和 M-v 的效率要更高一些。


* 基本的光标控制(BASIC CURSOR CONTROL)
----------------------------------------

整屏的移动很有用,但是如何在文字中精确定位呢?

有几种方式可以选择。用方向键当然可以,不过更有效率的方法是保持双手位于
主键盘区,然后使用 C-p 、 C-b 、 C-f 和 C-n 这四个命令。它们的功能和方
向键是一样的,如下图所示:

上一行 C-p
:
:
向左移 C-b .... 目前光标位置 .... 向右移 C-f
:
:
下一行 C-n

>> 用 C-n 或 C-p 将光标移到上图的中央。
按 C-l,整幅图会被显示在屏幕的中央。

"P N B F"四个字母分别代表了四个词,用这四个词记忆这些组合键会更容易:
P 代表 previous(上一行),N 代表 next(下一行),B 代表 backward(回
退),而 F 则代表 forward(前进)。这些组合键今后将与你形影不离。

>> 按几次 C-n 把光标往下挪到这里。

>> 用 C-f 把光标移动到这一行,然后再用 C-p 往上挪。
注意观察当光标在一行的中央时 C-p 命令的行为。

每行文字都以一个"换行符"结束,"换行符"把行与行区分开来。文件的最后
一行也应该也有一个换行符(不过 Emacs 并不强制要求这一点)。

>> 在一行的行头输入 C-b。
光标应该会移动到前一行的行尾,因为光标在回退过程中越过了换行符。

同样 C-f 也可以像 C-b 一样越过换行符。

>> 连按几次 C-b,感受一下光标的移动。
然后按几次 C-f 回到本行的行尾。
再按一次 C-f,光标会移动到下一行。

当你移动光标穿越屏幕的上下边界时,在边界外的文字会移动到屏幕内,这称为
"滚动"(scrolling)。滚动使得光标可以被移动到文字中的任何位置,并且还
不会让光标跑到屏幕外边去。

>> 用 C-n 将光标下移,一直越过屏幕边界,同时观察发生了什么变化。

如果你嫌一个字符一个字符地挪光标太慢,你还可以一个词一个词地跳。M-f
(META-f) 可以将光标往前移动一个词,而 M-b 则是往后移。【这里的"词"指
英文单词,对中文来说,则是指移动到下一个标点符号。】

>> 试试 M-f 和 M-b。

如果光标停在一个词的中间,M-f 会移动到这个词的末尾。如果光标处于词与词
之间的空白处,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-a 和 C-e 可以将光标移动到
"一行"的头部和尾部;而 M-a 和 M-e 则将光标移动到"一句"的头部和尾部。

>> 按两次 C-a,再按两次 C-e。
按两次 M-a,再按两次 M-e。

想一想为什么重复的 C-a 命令会没有作用,而重复的 M-a 命令则会让光标不断
地回退到上一个句子。虽然这个类比规律并不严格,但是很自然。

光标停留的位置也可以称作"点位"(point)。或者干脆说,光标指示出了屏幕
上"点位"在文本中的位置。

这里对简单的光标移动命令做一个总结,其中也包括了整词和整句的移动:

C-f 向右移动一个字符
C-b 向左移动一个字符

M-f 向右移动一个词【中文是移动到下一个标点符号】
M-b 向左移动一个词【中文是移动到上一个标点符号】

C-n 移动到下一行
C-p 移动到上一行

C-a 移动到行首
C-e 移动到行尾

M-a 移动到句首
M-e 移动到句尾

>> 把上面所有的命令都练习几次,这些可都是最常用的命令。

这里还要介绍两个重要的光标移动命令:M-< (META 小于号)可以将光标移动到
所有文字的最开头;M-> (META 大于号)可以将光标移动到所有文字的最末尾。

注意,在大部分键盘上,小于号(<)需要用上档键(Shift)来输入,所以在这
些键盘上你应该用 Shift 键来输入 M-<,如果不按 Shift 键,你输入的会是
M-comma(META 逗号)。

>> 试一试 M-< ,移到本快速指南的最开始。
然后再按几次 C-v 回到这里。

>> 试一试 M-> ,移到本快速指南的最末尾。
然后再按几次 M-v 回到这里。

如果你的键盘上有方向键的话,也可以用它们来移动光标。不过我们有三个理由
推荐你学习 C-b 、C-f 、C-n 、和 C-p:(1)它们在任何键盘上都能用。(2)
当你熟练使用 Emacs 之后,你会发现用这些组合键比用方向键要快得多,因为你
的手不需要离开打字区。(3)一旦你习惯了使用这些组合键,你也可以很容易地
适应其它更高级的光标移动命令。

大部份的 Emacs 命令接受数字参数,并且对于多数命令而言,这些数字参数的作
用是指定命令的重复次数。为一个命令指定数字参数(也就是重复次数)的方法
是:先输入 C-u,然后输入数字作为参数,最后再输入命令。如果你有META (或
EDIT 或 ALT)键,那么还有另一种办法:按住 META 键不动,然后输入数字。不
过我们还是建议你用 C-u,因为它在任何终端机上都能用。这种数字参数也称为
"前缀参数",意思是说这个参数是先于使用它的命令而输入的。

举例来说, C-u 8 C-f 会向前移动 8 个字符。

>> 为 C-n 或者 C-p 指定一个数字参数,这样你可以只用一个命令就把光标移动
到本行的附近。

虽然大部份命令用数字参数来作为其重复次数,但是也有些命令例外,它们将数
字参数另做它用。比如有些命令(目前还没学到)仅仅将前缀参数作为一个标
志――只要有一个前缀参数出现,不管其值为何,命令的功能都会改变。

而 C-v 和 M-v 则属于另一种类型的例外。当给定一个参数时,它们将滚动你指
定的"行数",而不是"屏数"。举例来说,C-u 8 C-v 将屏幕向下滚动 8 行,
而不是 8 屏。

>> 现在试试看,输入 C-u 8 C-v。

这个命令应该已经将文字向上滚动了 8 行。如果你想将它再次地向下滚动,你可
以给定一个参数然后执行 M-v。

如果你正在使用一个窗口系统,比如 X11 或者微软的 Windows,那么在 Emacs
窗口的左边或者右边应该有一个长方形的区域叫"滚动条",你可以用鼠标操纵
滚动条来滚动文字。

>> 试着在"滚动条内的反白区域"上按一下鼠标中键。
文字应该会滚动到鼠标所指示的位置。

>> 当按住中键时,试着将鼠标上下移动。
你会看到文字随着鼠标的移动而上下滚动。
【Windows 版本符合 Windows 程序的传统操作习惯,上述操作不适用。】


* 在 EMACS 失去响应的时候(WHEN EMACS IS HUNG)
-----------------------------------------------

如果 Emacs 对你的命令失去响应,你可以很安全地用 C-g 来终止这个命令。
C-g 也可以被用来终止一个执行过久的命令。

C-g 还可以被来取消数字参数和那些输入到一半的命令。

>> 输入 C-u 100 设定一个值为 100 的数字参数,然后按 C-g。
现在再按 C-f,光标应该只会移动一个字符,因为你已经用 C-g 取消了参数。

如果你不小心按了一下 <ESC>,你也可以用 C-g 来取消它。
【这个说法似乎有问题,因为按照这个按键顺序输入的应该是 C-M-g。
取消<ESC> 的正确做法是再连按两次 <ESC>。】


* 被禁用的命令(DISABLED COMMANDS)
-----------------------------------

有一些 Emacs 命令被"禁用"了,以避免初学者在不了解其确切功能的情况下误
用这些命令,造成麻烦。

如果你用到了一个被禁用的命令,Emacs 会显示一个提示消息,告诉你这个命令
到底是干什么的,询问你是否要继续,并在得到你的肯定之后再执行这命令。

你要是真的想执行被禁用的命令,那么在 Emacs 询问你的时候应该按空格。一般
来说,如果你不想执行,按"n"就行了。

>> 试试 C-x C-l (这是一个被禁用的命令)
然后用 n 来回答问题。


* 窗格(WINDOWS)
-----------------

Emacs 可以有多个窗格,每个窗格都显示不同的文字。我们后面再介绍怎么对付
多个窗格,现在先让我们先搞明白如何关掉多余的窗格。其实也很简单:

C-x 1 只保留一个窗格(也就是关掉其他所有的窗格)。

也就是先按 CONTROL-x 然后再按 1。C-x 1 会保留光标所在的窗格,并将其扩大
到整个屏幕,同时关掉所有其它的窗格。

>> 把光标移到本行然后输入 C-u 0 C-l。

>> 输入 CONTROL-h k CONTROL-f。观察当一个新窗格出现时当前窗格(用来显示
CONTROL-f 命令的文档)是如何缩小的。

>> 输入 C-x 1 关掉文档窗格。

这个命令跟先前学到的命令不太一样,因为它包含了两个字符,以 CONTROL-x 开
始。有一系列命令都是以 CONTROL-x 开始的,这些命令许多都跟"窗格、文件、
缓冲区【缓冲区(buffer)会在后文详细介绍】"等等诸如此类的东西有关,其
中有些命令可能有 2 个、3 个或者 4 个字符长。


* 插入与删除(INSERTING AND DELETING)
--------------------------------------

插入文字很简单,敲键盘就行了。你能看到的字符,比如 A、7、* 等等,都被
Emacs 视为文字并且可以直接插入。敲 <Return>(回车键)会插入一个换行符。

你可以用 <Delback> 来删除最后输入的的一个字符,这个跟你在 Emacs 之外的
用法应该一样。一般来说 <Delback> 就是位于 <Return> 键上方某处的一个大号
键,通常被标示为"Delete"、"Del"或者"Backspace"。

如果你找到了标着"Backspace"的键,那么它应该就是 <Delback>;即便你又在
键盘其它地方找到了一个标示为"Del"的键,那么它也应该不是 <Delback>。

一种更通用的说法是,<Delback> 将位于光标前的一个字符删除。

>> 现在就试试――敲点字,然后按几下 <Delback> 删除它们。
不用担心你会修改文件,你干什么都没关系,这里就是专给你练习用的。

如果一行文字很长、超出了窗格的宽度,显示不下的部分会在紧邻的下一行继续
显示。这时会有一个反斜线(控制台下是反斜线,如果你用图形窗口系统,则应
该是一个小小的转弯箭头)显示在右边沿,表明这是某一行的接续显示。

>> 输入文字,一直到屏幕的右边界,然后继续,你会看到一个接续行出现。

>> 用 <Delback> 删掉一些文字,直到此行长度小于窗格宽度,接续行就消失了。

你可以像删除其他字符一样删除换行符。删除两行中间的换行符会将两行合并成
一行。如果合并的结果使这一行太长,超出了窗格的宽度,它就会以一个接续行
来显示。

>> 移动光标到本行的开头并输入 <Delback>。
这时本行与其前一行将被合并为一行。

>> 输入 <Return> 重新插入你刚才删除的换行符。

前面说过,大部分的 Emacs 命令都可以指定重复次数,这其中也包括输入字符的
命令。重复执行输入字符的命令实际上就是输入多个一样的字符。

>> 试试 C-u 8 *,这将会插入 ********。

好,现在你应该已经掌握了最基本的的文本插入和修改功能,其实删除还可以
"以词为单位"进行,下面是一个关于"删除"操作的小结:

<Delback> 删除光标前的一个字符
C-d 删除光标后的一个字符

M-<Delback> 移除光标前的一个词
M-d 移除光标后的一个词

C-k 移除从光标到"行尾"间的字符
M-k 移除从光标到"句尾"间的字符

【可能你已经注意到了"删除(delete)"和"移除(kill)"的用词区别,后
文会有详细说明。】

注意"<Delback> 和 C-d"还有"M-<Delback> 和 M-d"是根据前述惯例从 C-f
和 M-f 衍生出来的(其实<Delback>不是控制字符,我们先忽略这一点)。C-k
和 M-k 的关系在某种程度上与 C-e 和 M-e 一样――如果把"一行"和"一句"
作一个类比的话。

你也可以用一种统一的办法来移除缓冲区里的任何一部分:首先把光标移动到你
想要移除的区域的一端,然后按 C-@ 或 C-SPC(任一即可,SPC指空格)【注意,
C-SPC 往往被中文用户设定成输入法热键,如果这样,C-SPC 就被系统拦截而无
法输入给 Emacs 了,因此这里还是推荐使用C-@。】,然后再移动到另一端,再
按 C-w 就可以把位于这两点之间的所有文字移除了。

>> 移动光标到上一段开头的"你"字。
>> 输入 C-@ 。Emacs 应该会在屏幕的下方显示一个"Mark set"的消息。
>> 移动光标到第二行中的"端"字。
>> 输入 C-w,就会把从"你"开始到"端"之前的文字全部移除。

注意,"移除(kill)"和"删除(delete)"的不同在于被移除的东西可以找回
来,而被删除的就不行了。【实际上,移除掉的东西虽然看起来"消失"了,但
实际上被 Emacs 记录了下来,因此还可以找回来;而删除掉的东西虽然也可能还
在内存里,但是已经被Emacs"抛弃"了,所以就找不回来了。】重新插入被移除
的文字称为"召回(yank)"。一般而言,那些会去除很多文字的命令会把去除
掉的文字储存起来(它们被设定成了"可召回"),而那些只是去除一个字符或
者只是去除空白的命令就不会储存那些被去除掉的东西(因此你就无法召回)。

>> 移动光标到一非空白行的行头,然后输入 C-k 移除那一行上的文字。

>> 再次 C-k,你可以看到它移除了跟在那一行后面的换行符。

注意,单独的 C-k 会把一行的内容移除,而第二个 C-k 则会移除换行符,并使
其后所有的行都向上移动。C-k 处理数字参数的方式很特别,它会把参数指定的
那么多行连同其后的换行符一起移除,而不仅仅是重复 C-k 而已。比如 C-u 2
C-k 会把两行以及它们的换行符移除;而如果只是输入 C-k 两次显然不是这个结
果。

将被移除的文字恢复的动作称为"召回(yanking)"。(就好像你把别人从你身
边移走的东西又猛力地拉回来。)你可以在你删除文字的地方召回,也可以在别
的地方召回,还可以多次召回同样的文字以得到它的多个拷贝。

召回的命令是 C-y。它会在光标所在处插入你最后移除的文字。

>> 试试看,输入 C-y 将文字召回。

如果你一次连按了好几下 C-k,那么所有被移除的行会被存储在一起,只要一个
C-y 就可以把它们都召回。

>> 在这里试试,连续按几次 C-k。

现在再来恢复刚刚被我们移除的文字:

>> 按 C-y。然后把光标往下移动几行,再按一次 C-y。
现在你应该知道怎么复制文字了。

C-y 可以把最近移除的文字召回,但如果你想召回的东西不是最近移除的,该怎
么办呢?它们当然没有丢,你可以用 M-y 来召回它们。在用 C-y 召回最近移除
的文字之后,紧接着再用 M-y 就可以召回再前一次被移除的文字,再按一次
M-y 又可以召回再上一次的,因此只要多按几次 M-y 就可以找到你想要召回的东
西了。找到了之后,你什么也不用做,把它们晾在那里,继续你的编辑就行了。

如果你一次按 M-y 按了很多下,你可能会回到起始点,也就是最近移除的文字。
【看得出这实际上是一个环。】

>> 移除一行,移动一下光标,然后再移除另外一行。
按 C-y 将第二次移除的那行召回来。
紧接着再按 M-y,它将会被第一次移除的那行取代。
试着再按几下 M-y 看看会发生什么。
再继续,直到第二行被召回来,然后再做个几次。
如果你愿意,你可以试着给 M-y 指定一个正的或负的参数。


* 撤销(UNDO)
--------------

如果你修改了一段文字,又觉得改得不好,可以用 undo 命令进行撤销:
C-x u。

通常 C-x u 会消除一个命令所造成的所有改变;如果你在一行中连续多次地使用
C-x u,你会把以前的命令也依次撤销。

但是有两个例外:
1) 没有改变文字的命令不算(包括光标移动命令和滚动命令)
2) 从键盘输入的字符以组为单位――每组 20 个字符――来进行处理。
(这是为了减少你在撤销"插入文字"动作时需要输入 C-x u 的次数)

>> 用 C-k 将这一行移除,然后输入 C-x u ,它会再次出现。

C-_ 也是撤销命令;它的作用跟 C-x u 一样,但是它比较容易多次输入。C-_ 的
缺点是在某些键盘上可能不太容易按,这也正是我们同时提供 C-x u 的原因。在
某些终端上,你可以按住 CONTROL 再按"/"来输入 C-_。

数字参数对于 C-_ 和 C-x u 的意义是执行撤销的重复次数。


* 文件(FILE)
--------------

想保存工作成果就要记得存盘,否则一旦退出 Emacs 你编辑的文字就都丢了。要
存盘,就要在编辑前"寻找"到一个存盘文件。(这个过程通常也被称为"访问"
文件。)

寻找到一个文件意味着你可以在 Emacs 里查看这个文件的内容。从很多角度讲,
这就等于你在直接编辑这个文件。但是你所做的修改只有在"存盘"的时候才会
被写入文件。也正因为如此,你可以丢弃一个改到一半的文件而不必把这个残废
文件也保存到计算机上。最后就算你真正存了盘,Emacs 也会把存盘前的文件重
命名保存,以防你改完之后又想反悔。

在屏幕的下方,你应该能够看到头尾都是短线"-"的一行,其开头通常都是诸如
"--:-- TUTORIAL.cn"这样的东西,这些文字就代表了你当前正在访问的文件。
现在你访问的文件叫"TUTORIAL.cn",它只是给你个人临时使用的一个拷贝。只
要你用 Emacs 寻找到一个文件,文件名就会出现在上述位置。

寻找文件的命令有一个特别之处,那就是你必须给出文件名。我们称这个命令
"从终端读入了一个参数"(在这里,这个参数显然就是文件名)。当你输入了
这个命令之后:

C-x C-f 寻找一个文件

Emacs 会提示你输入文件名。你输入的文件名会出现在屏幕最底端的一行,这一
行被称为小缓冲(minibuffer),在小缓冲里你可以使用通常的 Emacs 编辑命令
来编辑文件名。

在小缓冲里输入文件名(其实输入别的东西也一样)时可以用 C-g 取消。

>> 输入 C-x C-f,然后输入 C-g
这会关掉小缓冲,同时也会取消使用小缓冲的 C-x C-f 命令。
当然了,你也没有找任何文件。

输入完文件名之后用 <Return> 结束,然后 C-x C-f 命令开始工作并找到你指定
的文件。小缓冲在 C-x C-f 命令结束之后也会消失。

眨眼间文件就会显示在屏幕上,你可以开始编辑了。存盘用这个命令:

C-x C-s 储存这个文件

这个命令把 Emacs 中的文字存储到文件中。第一次存盘的时候 Emacs 会将原文
件重命名以保留原文。重命名的规则通常是在原文件名之后添加一个"~"字符。

存盘结束后,Emacs 会显示写入文件的文件名。你最好养成经常存盘的习惯,这
样在系统崩溃或者死机的时候你不会损失太多。

>> 输入 C-x C-s 把本快速指南存下来。
你会看到"Wrote ...TUTORIAL.cn"这样的消息显示在屏幕的下方。

注意:使用某些终端的时候,输入 C-x C-s 会冻结屏幕【屏幕没有任何输出】,
这样你就看不到 Emacs 的任何变化。其原因是操作系统的"流量控制"功能把
C-s 拦截了,并且冻结了屏幕,Emacs 自然也就看不到这个输入了。用 C-q 可以
解除屏幕冻结。要解决这个问题,请参考 Emacs 手册里的"Spontaneous Entry
to Incremental Search"一节【Emacs 手册可能还没有中文翻译】,那里可能有
一些有用的建议。

你可以寻找一个已有的文件然后查看或者编辑,你还可以寻找一个不存在的文件。
实际上这正是用 Emacs 创建新文件的方法:找到不存在的新文件,然后从零开始。
在存盘的时候,Emacs 才真正创建这个文件然后再存盘。在这之后一切就跟你编
辑一个已有文件一样了。


* 缓冲区(BUFFER)
------------------

如果你用 C-x C-f 找到第二个文件,第一个文件仍然会在 Emacs 里。要切回第
一个文件,你可以 C-x C-f 再次寻找它。这样,你可以在 Emacs 里同时打开很
多文件。

>> 用 C-x C-f foo <Return> 的方式建立一个名为"foo"的文件。
然后敲入一些文字,再用 C-x C-s 保存文件"foo"。
最后,输入 C-x C-f TUTORIAL.cn <Return> 回到这里。

Emacs 把每个编辑中的文件都放在一个称为"缓冲区(buffer)"的地方。每寻
找到一个文件,Emacs 就在其内部开辟一个缓冲区。用下面的命令可以列出当前
所有的缓冲区:

C-x C-b 列出缓冲区

>> 现在就试一下 C-x C-b

观察一下缓冲区是如何命名的,它很可能跟其对应的文件同名。事实上,你在一
个 Emacs 窗格里看到的任何文字都是某个缓冲区的一部分。

>> 输入 C-x 1 离开缓冲区列表

不管存在多少缓冲区,任何时候都只能有一个是"当前"缓冲区,也就是你正在
编辑的这个。如果你想编辑另外一个缓冲区,那么你必须"切换"过去。上面讲
过,用 C-x C-f 可以切换到某个文件对应的缓冲区。不过还有一个更简单点的办
法,那就是用 C-x b。用这个命令,你必须输入缓冲区的名称。

>> 输入 C-x b foo <Return> 以回到文件"foo"的缓冲区。
然后输入 C-x b TUTORIAL.cn <Return> 回到这里。

大多数情况下,缓冲区和与其对应的文件是同名的(不包括目录名),不过这也
不是绝对的。用 C-x C-b 得到的缓冲区列表中显示的总是缓冲区的名称。

你在 Emacs 窗格里看到的"任何"文字都一定是属于某个缓冲区的。也有些缓冲
区并没有对应文件:比如显示缓冲区列表的缓冲区就是这样,再比如一个名叫
"*Messages*"的缓冲区也没有对应的文件,这个缓冲区里存放的都是在 Emacs
底部出现的消息。

>> 输入 C-x b *Messages* <Return> 瞅瞅消息缓冲区里都有什么东西。
然后再输入 C-x b TUTORIAL.cn <Return> 回到这里。

如果你对文件做了修改,然后切换到另一个文件,这个动作并不会帮你把第一个
文件存盘,对第一个文件的修改仍然仅限于 Emacs 中,也就是在它对应的缓冲区
里。同时对第二个文件的修改也不会影响到第一个文件。这很有用,但是也挺麻
烦,因为如果你又想要存储第一个文件,你还需要先用 C-x C-f 切换回去,然后
再用 C-x C-s 存盘,这显然太麻烦了。你需要一个更简便的方法,而 Emacs 当
然已经替你想到了:

C-x s 保存多个缓冲区

C-x s 会找到所有已被修改但尚未存盘的缓冲区,然后向你逐个询问,是否需要
存盘?

>> 插入一行文字,然后输入 C-x s。
它应该会问你,是否要储存名为 TUTORIAL.cn 的缓冲区?
按"y"告诉它你想存盘。


* 命令集扩展(EXTENDING THE COMMAND SET)
-----------------------------------------

Emacs 的命令就像天上的星星,数也数不清。把它们都对应到 CONTROL 和 META
组合键上显然是不可能的事情。Emacs 用扩展(eXtend)命令来解决这个问题,
扩展命令有两种风格:

C-x 字符扩展。 C-x 之后输入另一个字符或者组合键。
M-x 命令名扩展。M-x 之后输入一个命令名。

很多扩展命令都很有用,虽然与你已经学过的命令比起来,他们可能不那么常用。
你应该已经见过一些扩展命令了,比如用 C-x C-f 寻找文件和用 C-x C-s 保存
文件。退出 Emacs 用的 C-x C-c 也是扩展命令。(不用担心退出 Emacs 会给你
带来什么损失,Emacs 会在退出之前提醒你保存文件的)

在控制台下,C-z 可以暂时离开 Emacs――当然,你还可以再回来。

在允许 C-z 的系统中,C-z 会把 Emacs"挂起",也就是说,它会回到 shell
但不退出 Emacs。在那些最常用的 shell 中,通常可以用"fg"或者"%emacs"
命令再次回到 Emacs 中。

在没有提供挂起功能的系统中,C-z 会在 Emacs 之下创建一个子 shell 来让你
运行其它程序,并且再次"回到" Emacs 中――虽然我们并没有真正离开过。这
种情况下,通常用shell 命令"exit"从子 shell 回到 Emacs。

C-x C-c 最好在你打算退出登陆的时候再用。在 Emacs 被诸如邮件处理程序之类
的外部程序调用之后,也可以用 C-x C-c 退出。不过一般来讲,如果你不想退出
登录,最好还是把 Emacs 挂起而不是退出。

C-x 的扩展命令有很多,下面列出的是你已经学过的:

C-x C-f 寻找文件。
C-x C-s 保存文件。
C-x C-b 列出缓冲区。
C-x C-c 离开 Emacs。
C-x 1 关掉其它所有窗格,只保留一个。
C-x u 撤销。

用命令名扩展的命令一般都不太常用,或者只在部分模式下被用到。比如
replace-string(字符串替换)这个命令,它会在全文范围内把一个字符串替换
成另一个。在你输入 M-x 的时候,Emacs 会在屏幕底端向你询问,然后你应该输
入命令名。如果你想输入"replace-string",其实只需要敲"repl s<TAB>"就
行了,Emacs 会帮你自动补齐的。输入完之后按 <Return> 。

字符串替换命令需要两个参数――被替换的字符串和用来替换它的字符串。每个
参数的输入用换行符来结束。

>> 将光标移到本行的下两行空白,然后输入
M-x repl s<Return>changed<Return>altered<Return>。

【为了继续练习,保留一行原文如下:
Notice how this line has changed: you've replaced... 】

请注意这一行是怎么改变的:在光标之后的范围内,你已经将"changed"这个
词――不管它在哪里出现――全部用"altered"替换掉了。


* 自动保存(AUTO SAVE)
-----------------------

如果你修改了一个文件但是还没来得及存盘,然后你的计算机罢工了,那么你编
辑的东西很可能就找不回来了。为了避免这样的不幸一再发生,Emacs 会定期将
你正在编辑的文件存入一个"自动保存"文件中。自动保存的文件名的头尾各有
一个"#"字符,比如你正在编辑"hello.c",那么它的自动保存文件就叫
"#hello.c#"。在你正常存盘之后,Emacs 会删除自动保存文件。

假如不幸真的发生了,你大可以从容的打开原来的文件(注意不是自动保存文件)
然后输入 M-x recover file<Return> 来恢复你的自动保存文件。在提示确认的
时候,输入 yes<Return> 就行了。


* 回显区(ECHO AREA)
---------------------

如果 Emacs 发现你输入多字符命令的节奏很慢,它会在窗格的下方称为"回显区"
的地方给你提示。回显区位于屏幕的最后一行。


* 状态栏(MODE LINE)
---------------------

位于回显区的正上方的一行被称为"状态栏"。状态栏上会显示一些信息,比如:

--:** TUTORIAL.cn (Fundamental)--L670--54%----------------

状态栏显示了 Emacs 的状态和你正在编辑的文字的一些信息。

你应该知道文件名的意思吧?就是你找到的那个文件嘛。-NN%-- 显示的是光标在
全文中的位置。如果位于文件的开头,那么就显示 --Top-- 而不是 --00%--;如
果位于文件的末尾,就显示 --Bot--。如果文件很小,一屏就足以显示全部内容,
那么状态栏会显示 --All--。

L 和其后的数字给出了光标所在行的行号。

最开头的星号(*)表示你已经对文字做过改动。刚刚打开的文件肯定没有被改动
过,所以状态栏上显示的不是星号而是短线(-)。

状态栏上小括号里的内容告诉你当前正在使用的编辑模式。缺省的模式是
Fundamental,就是你现在正在使用的这个。它是一种"主模式"。

Emacs 的主模式林林总总。有用来编辑程序代码的――比如 Lisp 模式;也有用
来编辑各种自然语言文本的――比如 Text 模式。任何情况下只能应用一个主模
式,其名称会显示在状态栏上,就在现在显示"Fundamental"的地方。

主模式有时会改变一些命令的行为。比如说,不管编辑什么样的程序代码,你都
可以用一个统一的命令来添加注释,但是在不同的语言中注释的语法往往是不同
的,这时相应的主模式就会分别用各自的语法规则来添加注释。主模式都是可以
用 M-x 启动的命令,所以 M-x fundamental-mode 就可以切换到 Fundamental
模式。

如果你要编辑自然语言文本――比如现在――你应该用 Text 模式。

>> 输入 M-x text mode<Return>。

别害怕,没有什么命令会改变功能。不过你可以发现,M-f 和 M-b 现在把单引号
(')视为词的一部分了。而在先前,在 Fundamental 模式中,M-f 和 M-b 都将
单引号视为分隔单词的符号。

主模式通常都会搞一些类似的小动作,因为很多命令其实完成的是"相同的工
作",只是在不同情况下会有不同的工作方式而已。【所谓"求同存异",在
Emacs 里得到了很好的体现】

用 C-h m 可以查看当前主模式的文档。

>> 用 C-u C-v 将本行带到靠近屏幕的上方。
>> 输入 C-h m,看看 Text 模式与 Fundamental 模式有哪些不同。
>> 输入 C-x 1 关掉文档窗格。

主模式之所以称之为"主(major)"模式,是因为同时还有"辅模式"(minor
mode)存在。辅模式并不能替代主模式,而是在主模式之外再做一些辅助的修改。
每个辅模式都可以独立地开启和关闭,跟其它辅模式无关,跟主模式也无关。所
以你可以不用辅模式,也可以用一个或者多个辅模式。

有一个叫做自动折行(Auto Fill)的辅模式用处很大,特别是在编辑自然语言文
本的时候。这个辅模式启动后,Emacs 会在你打字超出一行边界时自动替你换行。

用 M-x auto fill mode<Return> 启动自动折行模式。启动之后,如果我们再用
一次 M-x auto fill mode<Return>,自动折行模式就被关闭了。也就是说,如果
自动折行模式没有开启,这个命令会开启它;而如果已经开启了,这个命令会关
闭它。我们说这个命令用来"开关(toggle)"模式。

>> 现在输入 M-x auto fill mode<Return>。然后随便敲点什么,直到你看到它
分成两行。必须敲一些空格,因为 Auto Fill 只在空白处进行断行。【空格
对英文来说是必须的,而对中文则不必。】

行边界通常被设定为 70 个字符【这里指英文字符】,你可以用 C-x f 命令来重
新设定之。指定新行边界可以用数字参数来进行传递。

>> 输入 C-x f 并传递参数 20: C-u 2 0 C-x f。
然后输入一些文字,观察 Emacs 的自动折行动作
最后再用 C-x f 将边界设回 70。

如果你在段落的中间做了一些修改,那么自动折行模式不会替你把整个段落重新
折行。重新自动折行用 M-q,注意使用的时候光标必须位于你想折行的那一段里。

>> 移动光标到前一段中,然后输入 M-q。


* 搜索(SEARCHING)
-------------------

Emacs 可以向前或者向后搜索字符串。搜索命令是一个移动光标的命令:搜索成
功后,光标会停留在搜索目标出现的地方。

Emacs 的搜索命令的独特之处在于,它是"渐进的(incremental)",意思是搜
索与输入同时进行:你在这边一个字一个字地输入你想搜索的东西,同时 Emacs
在那边就替你搜索了。

C-s 是向前搜索,C-r 是向后搜索。不过手别这么快!先等等别着急试。

在你按下 C-s 之后,你会发现回显区里有"I-search"字样出现,这是在提示
你目前 Emacs 正处于"渐进搜索"状态,正在等待你输入搜索字串。<Return>
会结束搜索。

>> 输入 C-s 开始一个搜索。注意敲慢一点,一次输入一个字符。
慢慢输入"cursor"整个词,每敲一个字就暂停一下,注意观察光标。
现在你应该已曾经找到"cursor"这个词了。
>> 再按一次 C-s,搜索下一个"cursor"出现的位置。
>> 现在按四次退格键,看看光标是如何移动的。
>> 敲 <Return> 结束搜索。

刚才看仔细了么?在一个渐进式搜索中,Emacs 会尝试跳到你输入的字符串的出
现位置。想跳到下一个搜索目标出现的位置,只要再按一次 C-s 就行了。如果找
不到,Emacs 会发出"哔"的一声,告诉你搜索失败。在整个过程中,都可以用
C-g 来终止搜索。【你会发现 C-g 之后光标回到了搜索开始前的地方,而
<Return> 会让光标留在搜索结果上,这是很有用的功能。】

注意:使用某些终端的时候,输入 C-x C-s 会冻结屏幕【屏幕没有任何输出】,
这样你就看不到 Emacs 的任何变化。其原因是操作系统的"流量控制"功能把
C-s 拦截了,并且冻结了屏幕,Emacs 自然也就看不到这个输入了。用 C-q 可以
解除屏幕冻结。要解决这个问题,请参考 Emacs 手册里的"Spontaneous Entry
to Incremental Search"一节【Emacs 手册可能还没有中文翻译】,那里可能有
一些有用的建议。

如果你正在渐进式搜索中,按退格键会删除目标字符串的最后一个字符,并且光
标会回到最近一次搜索的命中位置。比如你已经输入了"c",光标就停在"c"
第一次出现的地方,再输入"u",光标停在"cu"第一次出现的地方,这时再按
退格键,"u"就从搜索字串中消失了,然后光标会回到"c"第一次出现的地方。

另外如果你在搜索的时候输入了 CONTROL 或者 META 组合键的话,搜索可能会
结束。(也有例外,比如 C-s 和 M-r 这些对搜索有特别意义的组合键。)

前面说的都是"向下"搜索,如果想"向上"搜索,可以用 C-r。C-r 与 C-s
相比除了搜索方向相反之外,其它的操作都一样。


* 多窗格(MULTIPLE WINDOWS)
----------------------------

Emacs 的迷人之处很多,能够在屏幕上同时显示多个窗格就是其中之一。

>> 移动光标到这一行,然后输入 C-u 0 C-l。

>> 现在输入 C-x 2,它会将屏幕划分成两个窗格。
这两个窗格里显示的都是本篇快速指南,而光标则停留在上方的窗格里。

>> 试试用 C-M-v 滚动下方的窗格。
(如果你并没有 META 键,用 ESC C-v 也可以。)
【向上滚动是 C-M-S-v,也就是同时按住 CONTROL、META 和 SHIFT 再按 v】

>> 输入 C-x o("o"指的是"其它(other)"),
将光标转移到下方的窗格。

>> 在下方的窗格中,用 C-v 和 M-v 来滚动。
同时继续在上方的窗格里阅读这些指导。

>> 再输入 C-x o 将光标移回到上方的窗格里。
光标会回到它在上方窗格中原本所在的位置。

连续使用 C-x o 可以遍历所有窗格。每一个窗格都有它自己的光标位置,但是只
有一个窗格会真正显示这个光标。【其它窗格在控制台下不会显示光标,在图形
窗口下缺省显示为镂空光标。】一般所有的编辑命令都作用于这个光标所在的窗
格,我们称这个窗格为"被选中的窗格"。

当你在一个窗格中编辑,但是想用另一个窗格作参考的时候,C-M-v 是很有用的
命令。你可以保持光标始终处于编辑窗格中,然后用 C-M-v 命令在另外一个窗格
里滚动。【翻译和校对就很适合用这种方式进行。】

C-M-v 是一个 CONTROL-META 组合键。如果你有 META 键,你可以同时按住
CONTROL 和 META 键然后输入 v。CONTROL 和 META 键哪个先按没有关系,因为
它们只是用来"修饰(modify)"你输入的字符的。

如果你并没有 META 键,你也可以用 ESC 来代替,不过这样子按键顺序就有关系
了:你必须输入 ESC ,然后再输入 CONTROL-v。CONTROL-ESC v 是没用的,因为
ESC 本身是一个字符键,而不是一个修饰键(modifier key)。

>> (在上方窗格里)输入 C-x 1 关掉下方窗格。

(如果你在下方的窗格里输入 C-x 1,那么就会关掉上方的窗格。你可以把这个
命令看成是"只保留一个窗格"――就是我正在编辑的这个。)

不同的窗格里可以显示不同的缓冲区。如果你在一个窗格里用 C-x C-f 打开了
一个文件,另一个窗格并不会有什么变化。在任何一个窗格里都可以打开文件。

有一种方式可以让你在另一个窗格里打开文件:

>> 输入 C-x 4 C-f,后面紧跟着输入一个文件名,用 <Return> 结束。
可以看到你指定的文件出现在下方的窗格中,同时光标也跳到了那里。

>> 输入 C-x o 回到上方的窗格,然后再用 C-x 1 关掉下方窗格。


* 递归编辑(RECURSIVE EDITING LEVELS)
--------------------------------------

有时候你会进入所谓的"递归编辑"。递归编辑状态由位于状态栏的方括号所指
示,其中包含了用小括号来指明的模式名称。比如说,你有时可能会看到
[(Fundamental)],而不是 (Fundamental)。【比如在用 M-% 进行交互式替换的
时候你又用了 C-s 进行搜索,这时替换模式并没有结束,但你又进入了搜索模式,
这就是所谓的递归编辑。】

离开递归编辑可以用 ESC ESC ESC。这是一个最通用的"离开"命令,你甚至可
以使用它来关掉多余的窗格,或者离开小缓冲。

>> 输入 M-x 进入小缓冲;然后输入 ESC ESC ESC 离开。

你不能用 C-g 来离开递归编辑,因为 C-g 的作用是取消命令和"参数
(arguments)",而这些东西都位于本层递归编辑"之内"。


* 获得更多帮助(GETTING MORE HELP)
-----------------------------------

本快速指南的目的仅仅是帮助你学会在 Emacs 的大海里游泳,不至于一上来就淹
死。有关 Emacs 的话题三天三夜也讲不完,这里自然是写不下了。Emacs 很理解
你求知若渴的心情,因为它提供的强劲功能实在是太多了。Emacs 提供了一些命
令来查看 Emacs 命令的文档,这些命令都以 CONTROL-h 开头,这个字符也因此
被称为"Help(帮助)字符"。

要使用帮助(Help)功能,请先输入 C-h,然后再输入一个说明你需求的字符。
如果你晕到连需要什么帮助都不知道,那么就输入 C-h ?,Emacs 会告诉你它能
提供哪些帮助。如果你已经按了 C-h 又想反悔,那么用 C-g 取消它就是了。

(有些站点改变了 C-h 的意思,他们这种以己度人外加一刀切的做法让倒是让你
可以义正辞严的抱怨系统管理员,真的不是太好。话说回来,如果你按 C-h 之后
没有任何帮助信息显示出来,那么试试 F1 键或者 M-x help <Return>。)

最基本的帮助功能是 C-h c。输入 C-h c 之后在输入一个组合键,Emacs 会很简
要地给出这个命令的说明。

>> 输入 C-h c C-p。

显示的消息应该会是这样:

C-p runs the command previous-line

这条消息显示了 C-p 命令对应的函数名,函数名主要用来定制和扩展 Emacs。命
令的功能由函数完成,所以函数名本身也可以被看成是最简单的文档――至少对
于你已经学过的命令来说,它们的函数名足以解释它们所完成的工作了。

多字符命令一样可以用 C-h c 来查看。

想得到更多的信息,请把 C-h c 换成 C-h k 试试看。

>> 输入 C-h k C-p。

上面的命令会新打开一个 Emacs 窗格,并在其中显示函数的名称及其文档。你读
完之后,可以用 C-x 1 关掉这个帮助窗格。当然你并不需要在 C-h k 之后立即
这样做,你完全可以先在编辑窗格里做点别的事情,然后再用 C-x 1 关掉帮助。

还有一些其他有用的 C-h 命令:

C-h f 解释一个函数。你要输入函数名。

>> 试试看,输入 C-h f previous-line<Return>。
Emacs 会给出它所知道的所有有关"实现 C-p 命令功能的函数"的信息。

C-h v 用来显示 Emacs 变量的文档,Emacs 变量可以被用来"定制 Emacs 的行
为"。同样,你需要输入变量的名称。

C-h a 相关命令搜索(Command Apropos)。
输入一个关键词然后 Emacs 会列出所有命令名中包含此关键词
的命令。这些命令全都可以用 M-x 来启动。对于某些命令来说,
相关命令搜索还会列出一两个组合键。

>> 输入 C-h a file<Return>。

Emacs 会在另一个窗格里显示一个 M-x 命令列表,这个列表包含了所有名称中含
有"file"的命令。你可以看到像"C-x C-f"这样的组合键显示在"find-file"
这样的命令名的旁边。

>> 用 C-M-v 来回滚动 help 窗格,多试几次。

>> 输入 C-x 1 来删除 help 窗格。

C-h i 阅读联机手册(也就是通常讲的 Info)。
这个命令会打开一个称为"*info*"的特殊缓冲区,在那里,
你可以阅读安装在系统里的软件包使用手册。要读 Emacs 的使
用手册,按 m emacs <Return> 就可以了。如果你之前从没用
过 Info 系统,那么请按"?",Emacs 会带你进入 Info 的使
用指南。在看完本快速指南之后,Emacs Info 会成为你的主要
参考文档。


* 更多精彩(MORE FEATURES)
---------------------------

想了解更多使用 Emacs 的知识,应该去读一读 Emacs 使用手册――可以是纸版
的书,也可以是电子版的联机帮助(可以从 Help 菜单进入或者按 F10 h r)。
提两个你可能会很感兴趣的功能吧,一个是可以帮你少敲键盘的 completion(自
动补全),一个是方便文件处理的 dired(目录编辑)。

Completion 可以替你节省不必要的键盘输入。比如说你想切换到 *Message* 缓
冲区,你就可以用 C-x b *M<Tab> 来完成,只要 Emacs 能够从你已经输入的文
字中判断出你想要输入的东西,它会自动帮你补齐余下的。有关 Completion 的
详细解释可以在 Emacs Info 中的"Completion"一节里找到。

Dired 可以在一个缓冲区里列出一个目录里的所有文件(可以选择是否也列出子
目录),然后你可以在这个文件列表上完成对文件的移动、访问、改名或者删除
等等操作。Dired 也在 Emacs Info 中有详细说明,就在"Dired"一节。

Emacs 使用手册里还有很多很多的精彩功能等着你来了解。


* 总结(CONCLUSION)
--------------------

记住,要退出 Emacs 请用 C-x C-c。要暂时切换到 shell 并且稍后再回到
Emacs 里来,请用 C-z。【切换到 shell 仅对控制台下的 Emacs 有效】

本文完全是为零起点新手写的傻瓜教程。如果你觉得哪里还看不明白,千万不要
觉得不好意思,那一定是我们没有写好。我们永远欢迎你的不满和抱怨。


* 翻译(TRANSLATION)
---------------------

翻译:孙 一江 <sunyijiang@gmail.com>
校对:水木社区(www.newsmth.net)Emacs 板众多网友

Emacs 快速指南(Tutorial)早有两个刘昭宏的中文译本,繁简各一。其简体版本
(TUTORIAL.cn)基本由繁体版本(TUTORIAL.zh)经词语替换而得。然而繁简中文
不仅在用词习惯上有所不同,更有诸多表达方式和句法方面的差异。因此一直以来
阅读 TUTORIAL.cn 都略觉晦涩和生硬。这次重新翻译 TUTORIAL.cn 的动机正是源
于这种体验,希望我们的工作能够弥补这个缺憾。TUTORIAL.zh 的译文质量很高,
在翻译过程中给予过我们很多借鉴和参考,在此对刘昭宏的工作表示感谢。

翻译过程中最大的挑战莫过于术语译词的选择了。经过水木社区 Emacs 板热心网
友小范围内的讨论,我们选择了现在的译法。用户的广泛参与是自由软件生命力的
源泉,所以如果你有任何建议、更正或更好的想法,请用你喜欢的方式向我们提出
。你可以直接给我发电子邮件,也可以放到 Emacs 的开发邮件列表或者水木社区
的 Emacs 板上进行讨论。下面列出主要术语的译词对照,并给出注释说明:

command 命令
cursor 光标
scrolling 滚动
numeric argument 数字参数
window 窗格 [1]
insert 插入
delete 删除 [2]
kill 移除 [2]
yank 召回 [2]
undo 撤销
file 文件
buffer 缓冲区
minibuffer 小缓冲
echo area 回显区
mode line 状态栏
search 搜索
incremental search 渐进式搜索 [3]

[1] "window"一词在计算机相关的领域一般都被译为"窗口"。但是在 Emacs
中,还有一个"frame"的概念。在被广泛使用的 X 窗口系统和微软的视窗
(Windows)系列操作系统中,Emacs 的一个"frame"就是一个"窗口",因
此把 Emacs 中的"frame"译成"窗口"更加符合通常的习惯。这样,Emacs
中的"window"就只能译成"窗格"了。我们认为 Emacs 中 window 和
frame 的关系用窗格和窗口来类比是十分形象的。

[2] 对于"delete"和"kill"的区别,正文已经给出了详细的说明。"删除"和
"移除"相比较起来,前者更多地隐含着"破坏"和"不可恢复"的意思,而
后者更多地隐含着"被转移"和"可恢复"的意思。因此分别选择它们作为上
述两词的译词,希望能够体现出区别。"yank"在中文文档中鲜有对应译词出
现,翻译的困难较大。究其本意是:"a strong sudden pull"(参见韦氏词
典),即"猛然拉回"。在原文档中 yank 被引申为"将先前移除的东西再移
回来"这个意思,所以我们选择了"召回"一词与其对应。

[3] "incremental"一词在计算机著作中广泛出现,被广泛接受的中文译词有两
个:"增量的"和"渐进的"。"incremental search"翻译成"增量式搜索
"或者"渐进式搜索"都讲的通,且都有各自的形象之处。还是参考原文对其
的解释:"... means that the search happens while you type in the
string to search for"。意思是之所以称其为"incremental search",是
因为"在你输入搜索字符串的过程中,搜索就已经在进行了"。我们认为"增
量的"更加强调在现有基础上的变化(比如"增量备份","增量编译");
而"渐进的"更加强调过程的逐渐发展,也更加符合原文的意思。因此我们选
择将"incremental search"译作"渐进式搜索"。


* 版权声明(COPYING)
---------------------

This tutorial descends from a long line of Emacs tutorials
starting with the one written by Stuart Cracraft for the original Emacs.

This version of the tutorial, like GNU Emacs, is copyrighted, and
comes with permission to distribute copies on certain conditions:

Copyright (C) 1985, 1996, 1998, 2001, 2002, 2003, 2004,
2005 Free Software Foundation, Inc.

Permission is granted to anyone to make or distribute verbatim copies
of this document as received, in any medium, provided that the
copyright notice and permission notice are preserved,
and that the distributor grants the recipient permission
for further redistribution as permitted by this notice.

Permission is granted to distribute modified versions
of this document, or of portions of it,
under the above conditions, provided also that they
carry prominent notices stating who last altered them.

The conditions for copying Emacs itself are more complex, but in the
same spirit. Please read the file COPYING and then do give copies of
GNU Emacs to your friends. Help stamp out software obstructionism
("ownership") by using, writing, and sharing free software!

【下面为版权声明的译文,仅供参考。实际法律效力以英文原文为准。】

本快速指南沿袭自历史悠久的 Emacs 快速指南,可上溯至 Stuart Cracraft 为最
初的 Emacs 所作的版本。

本篇文档与 GNU Emacs 一样拥有版权,并允许在下列条件的约束下发行其拷贝:

本文档允许在不变更文档内容的情况下由任何人发布在任何媒体上,同时必须
完整保留版权和许可声明,且需给予受众与发行者完全相同的、如本声明所允
许的再次发行本文档的权利。

本声明允许在与上述条件相同的情况下发布经过修改的全部或是部分文档,同
时必须附带显要的文字以申明文档的最后修改者。

Emacs 自身的版权问题虽比本文档要复杂一些,但也基于相同的精神。敬请阅读文
件"COPYING",然后向你的朋友们分发 GNU Emacs 拷贝。让我们以使用、编写和
分享自由软件的实际行动来共同祛除软件障碍主义(所谓的"所有权")!

--
实践"三个代表"伟大思想

使用最强大的编辑器,代表最先进的生产力!

Emacs 版欢迎你 :- )


※ 修改:・crazycool 于 Feb 15 19:25:12 修改本文・[FROM: 147.8.182.*]
※ 来源:・水木社区 http://newsmth.net・[FROM: 147.8.182.*]

你属于哪一种linux程序员[ZT]

你属于哪一种linux程序员

刚刚接触linux,了解不深,就从网上找相关的资料,看看自己作适合哪一种类型的程序员,结果发现了O'Reilly出版社上面的一幅介绍linux程序员发展方向的一幅图片(同时上面标有需要看的书。具体的网址http://www.oreilly.com.cn/guide/guide_linux.php)。


我觉得对自己的帮助很大,起码能知道自己将来的道路有那么几条。我分析了一下,自己不适合走网络那一条路。本人性格再加上外界的干扰(很难讲的),使得我放弃了这条路。我选择走程序设计,一方面我感觉自己挺喜欢编程的,另一方面这一方向可以有很多选择,既可以搞linux应用程序的开发,还可以转向嵌入式开发。同时,由于我们必须要研究内核(好像很难),因此我们可以有更深的发展,能够向更高深的领域进军。

我大概看了一下各个IT公司招聘linux程序员。结起来也就是上面的三条路所指明的:
1. 网络:
a. 系统管理员: 管理网络服务器,包括配置,维护等等任务。
b. 网页开发工程师:(我不明白这根windows下的开发有什么不同,可能仅仅是开发工具的不同吧!好像也没那么简单,希望内行告知一下,特此感谢!)
2. 嵌入式开发: 主要是手机的开发,同时还有一些视频设备等等电子设备的开发。
3. 程序开发: 这里既有java程序的开发,也有c/c++的开发。既有驱动程序之类的基础软件的开发同时还有数据库等等大型软件的开发。这里的世界无限大。


自己刚刚上路,也不清楚路走得怎么样,希望大家提一下建议。 附两篇相当好的认路的文章:
1. http://zhidao.baidu.com/question/6788611.html
2.网址记不住了,还好保存下来了。 如下:


我的嵌入式之路ZZ前言
这个题目很大,给人一种感觉我好像很成功,其实不然。实际上自己水平不高,甚至很低,但是做过了一些曲折的学习道路,同时把自己真实的学习历程表达出来,希望对后来者有借鉴的意义,甚幸!

工作三年、几成废人!
我2000年毕业于华中地区的一个理工科大学,专业是机械电子,我当时已经签了一家内陆某个省级机关工作,家里八辈是农民,并且很偏远,能够进入这样的地方是祖坟有风水。但在毕业前夕有个进入it的机会,我本想进去的,家里人极力反对,阻力可想而知。同时要交4000元的违约金,对我来说是天文数字。大学里的费用很多是借的,几乎将近一半的费用是在大学勤工俭学挣的,为了省钱,高中一个学期回家一次,大学一年回去一次。并且我个人也有特殊的人生背景(悲景更确切),这里不多说了,写十篇也写不完,同时偏离主题。这样我就参加了工作。一张报纸一杯茶的日子,几乎下班后有种很空虚和恐慌的感觉。在工作中虽然是与自己专业有点关系,但是很少。专业几乎荒废。我自己也思考,如果再不出去,自己将会成废人,只好让国家养了。两年后决定出去,但是几成废人,谁要呢,只好到学校去镀金。这是中国教育和社会的悲哀!
至于专业就改为计算机方面,听说好找工作,我说实话不是很对计算机特别感兴趣,生存第一需要。不要笑我,哈哈!

考研成绩出来,超过了国家线几十分。那个方向要两个,我第三,但是那年非碘,不面试就按分数来排,自然我落选了。其实给我面试机会也不一定要我,哈哈,自己几斤几两很清楚。
最后调剂到另外一个学校,交钱,咬咬牙,交吧!现在仍然债台高筑!

进入学校前夕
为什么要把这段列出,看后就知道了。
单位有网络,经常上网查些英语资料,在那里唯独英语没有丢很多。于是我就在网上查资料,学什么好呢,最后确定学嵌入式把,听说跟硬件相对比较紧密!而我在大学里多少学习了数字电路,单片机等,所以多少也有所利用,不会真的一无所知。当然在这之
前也自学过数据结构,计算机组成原理等。C 语言在大学就学了。哈哈这就是我的家底。
我知道自己的基础差,于是我就拿操作系统,数据库、数据结构、c++来看,机关有这个好处,空余时间多,于是平常就看书,很痛苦,没有人请教。
另外就上网到论坛上去,我就到各个专业的技术论坛,其实是电子论坛和嵌入式论坛。我几乎没有发帖,几乎把几个大型的出名的论坛的帖子翻遍了,虽然有很多重复的,我才知道嵌入式是个什么东东。这些帖子对我以后的学习产生了极大的影响。

最关键两点:1、嵌入式是什么?
2、嵌入式需要哪些知识?
知道了这两点,好办!我就开始规划学习路线。计算机的基本理论不能丢,于是重点看组成原理,数据机构,操作系统、c++。同时论坛上了解到,实时操作系统ucos是一个很好的嵌入式操作系统,对初学者很好。于是我就买了一本书,但是代码在电脑里调不通,网上也有很多相同的问题,我就看书,分析代码,一遍不行就两遍,三遍,这样才看了入了门,才知道什么是进程。原来看操作系统书时,根本就不知道进程是个什么东西。
在这段时间掌握的东西不多,但是,对我以后的影响很大,我想起了大学时一个同学跟我说过了一句话:大学里最重要的不是学到了什么,最重要的是学会怎么学!大概是这个意思。
进入我的避难所
对我来讲,再次进入大学不再是大学,而是避难所。希望这次进入给我喘气和养精蓄锐的机会和时间。我是这样认为和实践的。
在学校我有三件事:上课,上图书馆,上网。
对于上课,学校开了很多课程,非常好,很多是名人名师讲解,于是很多同学都想学,都去听。我也考虑过,最后放弃。我是这样认为的,时间是有限的,什么都想学,什么都学不成。于是我把我自己学的课进行了分化,一般的课程通过就行,重要的一定好好学。我希望不要什么争论学习课程多和少的问题,这仅仅是我的看法。所以我的成绩应该是很差的。分数低。好在后来的单位没有要我的成绩单,否则就惨了。
我个人感觉是上图书馆的效率比在寝室里高多了,这是我的经验。
上网,我给自己定了规矩:不玩游戏,不灌水,少看电影!因为时间对我来说太少和宝贵了,我没有资格和资本来浪费这些。上网我就在几个重要的专业技术网站上逛,下载技术资料。我一个朋友最近开了一个嵌入式网站,www.embeded.cn 里面的资料相当一部分是我在网上找的资料。那个网站很不错,资料丰富,找嵌入式方面,特别是嵌入式linux的资料,异常丰富。
有人会问,您下了那么多资料,怎么看的完和消化的了呢?

我是这样对待这个问题的:
1、 网上资料比较零散,不系统,但是如果把差不多的东西收集起来看就相对完整了,(嵌入式的图书就是这两年特别多,特别是2004年,简直是向外涌!2003年想买本嵌入式,特别是嵌入式linux的不多。)
2、 对于像我这种入门的来说,很多看不懂,没关系,反复看,我个人对学习方法的一个总结是:重复是最好的老师!
3、 即使有的用不上,也可以收集以后用的上时查阅。
但是我并非什么都要,目前我的技术路线是嵌入式linux,所以像wince之类基本上不
收集。
总之,我在学校里我充分利用时间来学习,我看到一些同学整天的挂在网上打游戏,发
些无关痛痒的帖子,浪费时间呀!我真的很痛心!

学习嵌入式
在这里我把它单独列出,文章有点紊乱,但是内容希望有益。
1、学习linux
根据我在论坛的了解,我选择学习嵌入式linux,刚好我们学校也重视嵌入式linux,从实验室到课程安排都是关于嵌入式linux方面,天时地利!这里我把学习linux的经验和教训说说。
可以这样说,在论坛里说道学习linux差不多就学习linux内核。于是我电脑里安装了linux就开始看linux内核方面的书了。我记得来学校以前就买到一本陈莉君的讲linux内核的第一版,现在有第二版了。我就开始看那本说,大家说linux内核情景分析不错,我就买了上下册,后来又买了 《深入理解linux内核》,最后也买了毛德操的《嵌入式系统》也是分析linux内核代码的,主要讲arm相关的。
看内核期间是个非常痛苦的过程,看情景分析有种在森林中找出路,其间我组织了一些同学学习内核,几乎没有几个能坚持下来的。我认为我是坚持下来了。情景分析在看第一、第二遍是几乎没有摸到门道,我分析有三个方面的原因:1、自己的基础差,这是最关键的。2、内核本身很难。3、没有交流和高人指点。到了第三遍时我才摸到门,才差不多知道个linux的大概脉络,很多细节也是稀里糊涂。
学习linux总结,这里声明一下,我指的嵌入式主要是偏向软件的嵌入式。学习嵌入式的重点和难点关键在操作系统,如果没有掌握操作系统,我认为很难把握一个嵌入式系统。即使在做嵌入式开发中,作应有层的开发几乎可以不知道操作系统也可以开发,我认为那是浮在表面的。很难深入和提高自己的层次。声明:一孔之见!不可深究!
在学习linux内核过程中犯了一个极其严重路线错误:对linux几乎不懂就开始学习内核。我个人推荐一个学习路线是:使用linux—〉linxu系统编程开发---〉驱动开发和分析linux内核。而我差不多相反,实际上你不会使用linux也可以学习内核,但是如果你懂了这些东西学习更有效率。
关于要不要学习内核的问题,我的回答如下:不一定。如果你是喜欢钻研的那你进入内核会满足你的欲望。同时对你以后的嵌入式系统的开发有很好的影响。如果你想从事嵌入式linux系统开发,最好对内核有所了解。如果仅仅是做应用开发没有必要。我打个比喻:c、c++、java等语言是武林中的某个武林派别的话,如什么拳法,什么刀法等,那么linux 内核应该是一个人的内功的反应。
怎么开始学linux内核:最好有三件宝物:《深入理解linux内核》《情景分析》和源代码。
先看《深》,那主要讲原理,好像市场上有本讲原理性并且更浅,《linux内核设计与实现》听说不错。如果没有学习操作系统的,像我这样的,最好先看看操作系统原理的书。看了几遍后,就看情景分析,最好对着《深》看。两本交叉看,《深》是纲,《情》是目。最后深入代码。
2、学习嵌入式linux
学习嵌入式,我认为两个重点,cpu和操作系统,目前市场是比较流行arm,所以推荐大家学习arm。操作系统很多,我个人对开始学习的人,特别不是计算机专业的,推荐学习ucos。那是开源的,同时很小。学习很好。为什么选linux,我不想讲太多,网上这方面的太多,但是我在工作中发现,做linux的技术路线很难,在windows几乎不会有的问题,在linux开发中几乎遍地陷阱。一掉进去划很长时间出来,一旦解决自己又长进了!相对来说开发周期长,难度大。现在资料也逐渐丰富起来,难度也降低了些!
至于怎么学习,这是他的特色地方,必须有块开发板,我是同学里最早买学习板的,虽然化钱,我认为值。对我实习和工作产生了很大的影响。
如果没有开发板,那是纸上谈兵。有人说,那要1000-2000亚,的确是,兄弟,看长远的,对您的职业和发展那点钱不算什么!有的人说我站着说话不腰痛,好吧,钱这东西对我影响很大,我在大学里扫厕所,扫的不错,奖5元/月。兄弟你有过吗?我认为教育投资是效益最有保障的!我实习拿3k,很多同学拿1-2k,当然比我高的也有。虽然我现在没有毕业,但一家公司就签了。从事目前流行的高档的消费电子的研发。对于我两年前一无所知的我,应该有质的变化,我感谢学校收了我这个废品。当然我也非常的努力。说这么多并不是要炫耀我什么,实际上根本不值得炫耀,虽然现在工作环境和待遇比较满意,但是,我发现我很差,特别是代码能力,我希望平常大家少玩游戏,多编程。编程才是硬道理!
3、 学习板和培训
你可以不接受培训,但是不能不买开发板。如果你想学习嵌入式一定要买块学习板,最好买块arm9的,贵些也值。可以跑高级操作系统。这个不要什么品牌公司的,一般不会出什么问题,市场上的板子一般是三星的2410,基本上是抄的。如果是做产品那要注意些。一般的公司一般要2000,加lcd要3000甚至更多。我接触到有的板只要1200,加lcd也就2000,差别比较大,我认为学习都够啦。
对于培训,如果有条件最好参加,主要是嵌入式相对别的不同,自己摸索很费时,如果有高手指点非常的好,进步快。特别是认识做这些的朋友。我接受过培训,认识个朋友。在以后的工作中帮我很多,在这里谢谢他!我记得哈佛的一个MBA的学生这样说,大意是:在哈佛学到什么不重要,最重要的是这些未来各大公司的高级管理人员是我的同学!真是有远见!
目前市场是培训比较贵,一个星期两三千,真正算起来也要,那些讲师待遇绝对不会低。但是有个致命的问题是连续上课,一连几天,效果不佳。我希望社会上多出些1000元左右,并且时间长些,如一个月,一周一到两次课。如果没人做,我来做,哈哈!
没有想到,一下写了这么多,其实还想写的,比如在中科院的一位老兄是怎样学习linux内核和看书的,真的很感动。他的为人我很钦佩。也想介绍毛德操的《嵌入式系统》那本书,对学习arm linux的很好,也想介绍实习和工作的东西,太长了,耽误大家时间。我也不想检查里面的错别字了,很多!就写到这里吧。



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1120805

2007年4月29日星期日

今天做了件善事

其实早上去实验室的时候就看见了,中午吃饭的时候和同学说了,倒是挺感兴趣就去了。
说是为贫穷的孩子捐5元钱,可以免费做下血型检查。我从小到大做了无数次的身体检查,但是还真是不知道血型是哪种。于是“忽悠”同学一起做个“善事”。
很简单,只需要在手指上扎上一针,让血流出来,然后用一个很细的玻璃管,利用毛细现象吸取一点就可以了。然后在一个薄的玻璃板上,把血滴上去,根据反应现象就可以得出来。我原来是AB型的,呵呵。
这是在网上找的关于AB型的性格:
AB型

给人以优雅、柔软的印象。

 一、具有自我约束、忽冷忽热之基本特质。
 二、具有自我发现、科学分析之固定特质。
 三、具有自我警觉、疏离意识之变动特质。
 
  冷静、善于把握平衡的社交家

  给人以洗炼、优雅、恬静、柔和的印象。从不轻易表露自己的情感。不论在怎样的情形下,通常都能做出冷静的判断。头脑清晰,考虑事物全面、多角度。而所做的主张,也几乎都是“强烈”或“严厉”的。                  
  
表面理智、本性激烈

  给人的第一眼印象,多半为:智慧、纤细、善变、神经质、富企划性且分析锐利。谈话场合中,AB型就像个大企业家似的,总是过分沉着而审慎地筛选辞令,因为精于打算,不轻易表露自己的真实想法,所以多少给人以难于融合的印象。但是,具有很好的平衡能力和优秀的社交能力。博闻广识、话题新颖而丰富。

  AB型血的人平时极为理智,但因为具有A型血和B型血综合性的性格。所以,内心深处情感复杂,激情起伏。这一特点在极为亲近的人的面前表现突出。

还有爱情:
 男性
  
  AB型男性与A型女性
  常有这样的情况,只有AB型的人才能从看似温和、坚毅的A型女子身上感受到可爱之处。A型女性态度清高,说话讲究原则,尤其不愿示弱。
  
  对于喜欢的她,即使已经有了一定的感情基础,也切不可有丝毫急躁的表现;一旦你表现太露骨,太强加于人,那将是最危险的。在尚未深交之时,不能急躁,应顺其自然,坦率地表现你的性格,敞开你的心扉。但须注意不可用严以律己的原则来要求对方。一旦刺伤她的自尊心,将很难抹平。穷追不舍,速战速决的方式,对O型人或许奏效,但对A型的她,所得到的只能是对方的勃然变色,扬长而去。

  假如能取得她的亲友的好感和信赖,将有所帮助。求爱必须主动,但不能要求对方当场表态。

她喜欢你衣冠楚楚与她在幽静的海滨漫步叙情。与她约会,一定要有丰富的话题,生动风趣,信手拈来,无所不谈。她还喜欢富有幽默感的男人。送礼物不在于轻重,要让她认为有实用性。对于来自对方爱的试探,不要马上敞开心扉,立即表白;要沉着冷静地表示你对她的爱慕之情,细心地关怀,不可急于求成。A型的她外表看去十分成熟。然而其内心却是格外地娇气,常感寂寞,从精神世界看,有幼稚的一面。如果能看穿A型女性的这种孩子气,并对其怀着怜悯的疼爱。当她认为你是她唯一可求助可信赖的人,你就可以赢得爱情了。

  与她交际时要注意的是,尽管你跟她比较合得来,也不可随便打听她的隐私,更不可老是追究她在想什么,做什么。对她不要醋意大发,也不要丝毫的心猿意马,不然她会马上与你分道扬镳的。
  
  AB型男性与B型女性
  有点情投意合,双方交谈起来也总是津津有味。
  想与她约会,最好以有事商谈为由,比较容易接近。因B型人喜欢生动、活泼的谈话气氛。她喜欢富有朝气的穿着打扮,也喜欢与你一块儿看电影或看体育比赛。送的礼物一定要是双方都感到很有意义的东西。要注意,她是不能容忍你随随便便的态度的。一旦发现你有漫不经心的表现,你就再也不会有第二次与她见面的机会了。
  与她交往,要不加任何掩饰地直抒情怀,用向上司求助的语气与她交谈,会是富有同情心的她格外高兴。在这基础上,可循序渐进地表达自己的感情。在与她的交往发展到一定程度后,也不可轻易放松,不然也会前功尽弃。

  当发展到可以跟她约会时,不管她谈论什么话题,也不管她说得怎么样,你都要津津有味地倾听她的发言,选择恰当的时候,表示你对此话题的兴趣。
     以B型人的气质来看,她不喜欢太过拘泥,必要时可取得她的亲友的支持,但不要做得太过分。此外,还要注意到她执拗、任性的脾气。她有时会同时与几个人交朋友,必须弄清她的真实想法,然后再表白。

  
  AB型男性与O型女性
    O型女子追求现实,天真,具有人情味,AB型的你则讲究实际效果的合理性,有孩子般的好奇心。尤其是从O型女性的直爽、有时带有单纯、天真多样的表情中感受到确是一个可爱的、坦率的以及平易近人的人。 
  O型人比较注重第一印象。与她交往,如果一开始就给她留下不良的印象,以后要恢复是相当困难的;与此相反,假如初次见面你就给她留下好印象,以后你与她交往也就会顺利得多。

  为此,首先要对对方怀有诚意,让她感受到你的诚意,她才会放心与你交往,直至产生信赖。磨磨蹭蹭,转弯抹角的思想表达方式是不会让她动心的。一定要特别清醒地看到她的优缺点,不要乱拍马屁,也不可自作聪明地开导她,那样做非惹她生气不可。

  与她约会,最好选择她最得意的业余爱好,也可选择她最喜欢的工作,作为约会中交谈的话题,而且一言一行最好使用请教的语气。假如能与她长时间开怀畅谈那充满罗曼蒂克的爱情故事,将会有效。但要注意,与她相会时,绝不可思想开小差走神儿。她最喜欢你送一件可留作纪念的礼物。交往中要让她知道你非常喜欢她的心情;对她的优点,表示由衷的赞赏,并为共同的未来描绘出美丽的蓝图。
  
 她对亲朋好友比较宽容,随便跟她开几句玩笑是不要紧的。但是,千万别伤害她的自尊心。不然的话,她会火冒三丈的。她还讨厌别人对她表示恭维,不喜欢别人对她说感恩戴德的话。

  AB型男性与AB型女性
  AB型的她能一视同仁和很多人保持友好关系,并慢慢通过了解有选择的发展朋友。她不太执着于金钱和地位,但追求其自身价值的合理性,不乱花钱,也乐于储蓄。兴趣爱好广泛。一般来说,意外发现不会使AB型女孩动情,不可能获得她的信赖。与她恋爱应先从与她的朋友接触开始。广泛地与他们交朋友,最后由她值得信赖的朋友出面介绍,帮敲边鼓。此外,AB型女孩比较讨厌低级趣味的言行。用缠绵的情信去打动她的心,不失为一种好方法。但是,切不可虚张声势。有的AB型女孩非常讨厌家庭中各种各样复杂的关系,因此,最好不要让家人出面提什么要求和希望。

  她最喜欢别人有求于她。如果带上一件向她相求的事情去约会,她将非常乐意。她最不喜随大流,不喜欢华丽的衣着打扮。她追求的是高雅的情趣和生气盎然的谈话,希望你与她的约会能陶冶情操。于她相会最好是参观美术馆,看有意义的电影。当然,她也喜欢一块儿上饭馆。要注意,她不善于交谈感情变化多端的话题。

  如直接表白,大都会使她感到困惑。最好是找位双方可以信赖的朋友,耐心地向对方介绍情况。只要让她认为你是可以放心交往的朋友,你就会获得成功。
  
  情人相处之道
一、AB型的人,基本上比较注重感情的追求,所以,只需要专注个人魅力的发挥,多多交流有关生命成长、知识吸收之类的对话,想让他们坠入情网,自然不是困难之事。
二、值得强调的是,AB型情人具有探究、反覆、同情等错综复杂的人格特质,双方关系越是亲密,越容易被他们窥知缺点,也就越不懂得珍惜,所以,无论两者的感情发展到什么样程度,还是采取若即若离的怀柔手段为佳。
三、AB型的人,拒绝被人批评,因此,切莫大肆数落其缺点。
四、AB型的人,最讨厌咄咄逼人的家伙或者多嘴的八婆,所以,不是老是翻旧账


不知道她是那种血型,也许是A型吧。

2007年4月28日星期六

一天有一天

可能确实是太累了,昨晚又是看着看着书,都不知道自己是什么时候睡着的。早上7点多闹铃声把我吵醒的时候一看我还戴着眼镜,台灯还开着(苦了同学的台灯,寿命大减),书还在我身上。我赶快把灯关了(同学看见又要说我了),眼镜摘下来,继续睡觉。
再一次醒就是10点半了,是电话把我叫起来了。是我哥的女朋友,未来嫂子,问我什么时候回家。原来他们要回家了,我看是不能由我了,让他们先回去了。这是也不想睡了,又看起书来了。一直又到了下午2点,感觉不行该起来了,昨天跟一个老师说过要讨论问题,再不去就太晚了。

预答辩

昨天早上8点开始预答辩。所谓预答辩就是答辩的预先演练,虽不正式,但是很重要,所以老师们很重视。我觉得还没有准备好,就跟老师说延迟到下午了。
熬夜的后果显示出来了。坐在后面看着其他同学答辩,一方面隔行如隔山,不懂,另一方面真是瞌睡啊。一会儿就受不了了,不过还好似乎老师不在乎这个,许多人都不在,所以听了一个人的就回去了。要命的是还不能睡,因为我的答辩内容觉得还没有做好。
到了下午虽然人不多了,但是反而弄到很晚,我是最后一个,出丑了。之前我一直跟同学说,我的很空洞无物,可能没有什么可讲,或许是最快的一个。不过凭心而论,我这是说实话,我真的是这么想的,自己的东西只有自己清楚。不过我真的创造了一个之最,最长的答辩,足足有40分钟,而且我想要不是同学催的话,可能还会再长些。我觉得很不可思议,觉得当我站在那讲的时候时间真的过的很慢,我才觉得过了10几分钟,唉看来我得注意这个问题了。
我是从晚上7点多一点开始,一直到40多。苦了许多人,包括我老板。另一个老师要请他们去吃饭,就等着他们,但是没想到我搞到这么晚,有人该埋怨我了。呵呵!我不是故意的。

2007年4月27日星期五

相遇

冥冥中我是相信我和她是有缘的,而且是相当有缘,只是就像紫霞仙子说的“我猜到了开始,但是没有想到这结局”,我和她可能就是大家所说的没“份”吧!
昨天熬夜,7点多时醒来,同学说一起去吃早饭吧。对于我,实际上并没有感觉饿,只是有点渴,况且有师弟会给我买饼的,但是同学坚持,我想吃吃饭也好,就一起去了。
吃饭的食堂是靠近我所住的宿舍楼的“园中苑”餐厅。因为现在学校把建设的重点搬到了新校区,其他几个老校区因为人少,而且基本上只是些研究生和成教、自考的学生,所以餐厅的饭菜越发难吃,且可选择的种类很少。这个餐厅是我刚回到这个小区开始去的比较多的,但是越来越觉得不合算,已经很久没有去过了。不过我这个同学还是经常去那吃饭,我就跟着去了,买了一碗豆浆和两个糖包。我并不饿。
在食堂吃饭,我喜欢坐在靠近电视旁或者靠边的地方,这样安静(实际上食堂里面也没有什么安静的地儿)而且可以看电视。我们坐在靠近门的地方,电视也在这个地方。
刚吃了一个糖包,忽然一个穿着绿色衣服、长头发的女生闪进了我的眼里,虽然只是一个侧面,但是我觉得是那么的熟悉,那么的真实,心跳加速。大脑在飞速旋转,想着怎么回事?她不是在北京吗?这两天还在网上看见她(虽然她不理我),难道是刚回来,或者我看错了,只是太想她的错觉吗?但是我不会看错的,我忍不住往后面扫了扫,不敢仔细看。我觉得我的心理很奇怪,一方面很希望看见她,一方面又很害怕看见她,很矛盾,不是吗?不知道为什么。
这时,我对我的同学说,“她来了”。我以前跟她说过我们之间的事情,她也很快明白了,问在什么地方。我给她说了,她没有见过她,我粗略的给她指了位置。她看了看后让我去,我心里很紧张,刚熬了一夜,说实在的本来就有点觉得冷,这时我更是发颤。我还是鼓起了勇气,端着饭过去了。
到了她的对面,说了句“你回来了!”。意料之中,她冷冷的,也没说什么。我的心在痛。两个人就这样沉默着,偶尔我问一句,她不时回一句。这时我才知道她已经回来了好几天了,但是我完全不知道。我实在是吃不下去,她很快的吃过饭,说了一句“我走了”,头也不会的走了,只有我傻傻的坐在那里,过了一会儿才回过神回过头去看她,她已经走出餐厅很远了。现在后悔当时怎么没有追出去?
这就是昨天的意外相遇,否则的话我连她来、去都不知道。

PS:本来这是我昨天晚上就想记录下来的,但是我的一个师弟非要我和他一起去金水河旁转转。我想也很长时间没有这样了,就跟着他一起去转了转。把曾经和她在一起的地方都转了转,心情。。
两个陌生人-认识-熟悉-在一起-不在一起-隔阂-两个陌生人

熬夜

今天早上,或者说昨晚吧,我再次熬夜了。熬夜可不是什么好事,损害身体,但是最近我伤害了我自己身体好几次,昨晚又伤害了一次。
昨天晚上12点多,实验室一个女同学要回来,她去上海找工作了,因为今天要预答辩,所以只能匆匆赶来,说要在实验室熬夜,赶着做ppt。me2
本来要去接接她,女生这么晚从火车站出来还要坐车过来,确实挺危险的。后来她说不用,还要我在实验室给她做内应,因为这么晚实验室看门的肯定不让进。实验楼后面有个铁门是用来运输仪器的,可以从那里通过,不过需要从内部接应。她说晚上火车站人还是比较多,而且又有夜班车,我就没有去接。我在实验室赶着做ppt,别看不多,大概30多页,要讲15分钟左右,但是要把一个60多页的毕业论文浓缩到这里面还真不容易,得想想怎么安排,怎么说,所以进展缓慢。
到了12点10几分,电话来了,同学说到了实验室楼下了,我让她到实验楼侧面的那个门外等着。我轻轻踮着脚,开了门,下楼梯。我是在2楼,穿着皮鞋,想坐电梯,但是声音太大,实验楼看门的就在旁边,走楼梯时一步一步的,生怕被听到、发现,因为一般来说是不让晚上在实验室过的。
小心的下了楼梯,偏偏还得过看门的门,因为要去实验楼侧面开门得需要经过。轻轻地紧张的过去了,到后面就好办了,打开门,同学已经在等了。又小心翼翼的回到楼上,关上门,总算是放下心来。
要是以前熬夜,肯定会先看个1、2个小时论坛、新闻,但是今晚只能做这个了。和同学聊了一会儿她找工作的事情,就赶快做了起来,她也是。
但是长夜漫漫,刚熬了一夜,说实话睡眠严重不足,过了一两个小时我的眼皮就开始打架了,意识开始慢跑(奉劝一句,熬夜效率低,不是急事不要熬)。那个同学也熬不住了,睡了起来,我是手机定着时间,睡一个小时,起来工作一个小时,就这样时间飞速过去。
到了6点左右,就彻底趴下来睡了起来,人瞌睡的时候,睡觉是对他的最大奖赏。
夜,就这样过去。

2007年4月25日星期三

今夜又一不眠夜

刚刚写完毕业论文,因为外审(盲审),刚把它寄出去,星期五又要预答辩,事情真多。考博因为英语差了4分每过,现在也在郁闷期,虽说老板、院长等人都说可以,特招应该没有问题,但是上面还有一个研究生院把关,还是谨慎的乐观,看事态怎么变化吧。

刚才又忍不住看了她的blog,发现自己的意志真的有点薄弱,当时说不再登录那个blog了,不再看她的消息,但是总是欺骗不了自己,总是忍不住登陆上看看她的消息,看看她现在在做什么,在想什么?有时候觉得自己挺“贱”的,人家都不喜欢你,人家过的好好的,你操什么心。看着她的blog中的留言,觉得她过的比我好,这已经够了,她仍然是众人的焦点。看着那些留言心很痛,想着过去,我觉得似乎我在她的生活中从来没有出现过似的。我始终不知道她是怎么想的,她也似乎从来没有告诉过我。

前个星期忍不住跟她打了个电话,熟悉的声音,但是冷漠的话语,更加刺激我的心痛。心里有时也想也许该是祝福人家新生活的时候了,当时她说给她两年时间,中间不联系,我知道她这是让之冷淡下去,但是我会等到那一天的,也许到那时我才会真的死心。

今天,她在blog里转了几首相思的诗,有人问她想谁呢,她说“friends”,真的很有冲动想打电话问问是不是我,但是随即苦笑了。

今夜又一不眠夜,来麻醉我吧!

2007年4月22日星期日

这两天看了一个美剧《24》

《Prison Break》现在告一段落了,前些天同学又介绍了一个美剧《Heroes》,第一季刚拍到18集,明天将会出来19集。看了看,像《X战警》,很新颖,很不错,里面那个日本人很像我实验室一个同学,很有意思。
《Heroes》看完了,在水木的欧美电视版块看见许多人在讨论《24》,我也久闻大名了,于是这两天就下载了几集看了看。综合看的以前的美剧,不得不佩服人家的编剧、导演和摄影等,简直比中国的领先至少20年。听说这部剧用了16个编剧,10个导演,投资3500万美元。现在刚看了几集,有空再接着看。
这部电视剧是一个反恐怖主义题材的,整个第一季就是一天24小时组成,环环相扣,非常紧张刺激。但是看片之余,今天下午忽然有了一点感慨,觉得时间真是宝贵,一点一滴都是至关重要的,不能碌碌无为了,再虚度光阴了。

2007年4月21日星期六

unix/linux命令工具:screen

如果我们想退出终端而让我们的程序继续运行,怎么办?
nohup。
不错,但是如果我们要交互怎么办?
这个。。。?还真不知道
我知道,其实我也是刚知道不久,有一个命令被我们遗忘了,screen。

她到底什么呢?
我们从她的man说起。
官方man说“screen manager with VT100/ANSI terminal emulation”,据我使用觉得她类似我们在实机上时的按Ctrl+Alt+Fn所出现的终端。
她的命令格式为:
screen [ -options ] [ cmd [ args ] ]
当我们运行screen的时候就会新建一个窗口,并且启动一个shell,然后你就可以做和其他登录shell一样的事情了,但是只有一个例外,有些键被重新配置了,比如C-a(Ctrl+a)
当你敲C-a时就进入screen的管理模式。

首先我们先新建一个screen,可以有多种方法:
直接敲screen,这时自动产生一个窗口,并分配了一个名字
直接输入screen 命令,比如screen emacs,
或输入screen -S name,就会产生一个名字为name的窗口。

接下来我们看看screen的管理模式的一些基本命令:
C-a c -> Create,开启新的 window
C-a n -> Next,切换到下个 window
C-a p -> Previous,前一个 window
C-a C-a -> Other,在两个 window 间切换
C-a w -> Windows,列出已开启的 windows 有那些
C-a 0 -> 切换到第 0 个 window
C-a 1..9 -> 切换到第 1..9 个window
C-a a -> 发出 C-a,在 emacs, ve, bash, tcsh 下可移到行首
C-a t -> Time,显示当前时间,和系统的 load
C-a K(大写) -> kill window,强行关闭当前的 window
C-a [ -> 进入 copy mode,在 copy mode 下可以回滚、搜索、
复制就像用使用 vi 一样

C-b Backward,PageUp
C-f Forward,PageDown
H(大写) High,将光标移至左上角
L Low,将光标移至左下角
0 移到行首
$ 行末
w forward one word,以字为单位往前移
b backward one word,以字为单位往后移
Space 第一次按为标记区起点,第二次按为终点
Esc 结束 copy mode
C-a ] -> Paste,把刚刚在 copy mode 选定的内容贴上
C-a ? -> Help,显示简单说明

C-a d -> detach,将目前的 screen session (可能含有多个 windows)
丢到后台执行 当按了 C-a d 把 screen session detach 掉后,会回到还没进 screen 时的状态,此时在 screen session 里每个 window 内运行的 process (无论是前台/后台)都在继续执行,即使 logout 也不影响。

下次 login 进来时:

screen -ls -> 显示所有的 screen sessions
screen -r [keyword] -> 选择一个screen session 恢复对话

若 screen -ls 里有 Attached sessions:
screen -d [keyword] -> 强制 detach,以便「接手」过来

我们可以做一个例子:
[david@David ~]$ screen
[david@David ~]$ screen -ls
There is a screen on:
6909.pts-2.David (Attached)
1 Socket in /var/run/screen/S-david.
其中前面的数字为id,后面为终端号,再后面为主机名字
按C-a d,会出现
[detached]
回到最开始的终端,这时我们可以使用
[david@David software]$ screen -r 6909
重新连到新开的screen。

基本的screen命令基本上已经够用了,更详细的命令可以使用man。