Emacs 的整合环境

前面不断的强调,EMACS 不只提供一个编辑的环境,而提供 一个整合的工作环境。所以,在未进入本文的正题 - EMACS 的编辑环境之前,先对 EMACS 的工作环境做一个简介。

EMACS 所能提供的工作环境如下

  1. EMACS 可执行 Shell 的指令。
  2.  
  3. EMACS 可做为 Directory EditorDired)。
  4.  
  5. EMACS 可以编辑、编译及除错程式。
  6.  
  7. EMACS 具有编辑其它 host 上档案的能力。
  8.  
  9. EMACS 可以列印档案。
  10.  
  11. EMACS 具有年历、日记的功能(CalendarDiary)。
  12.  
  13. EMACS 具有读 Man Page 的能力。
  14.  
  15. EMACS 可以收发电子邮件(MailRmail)。
  16.  
  17. EMACS 可以阅读网路上的电子布告栏(GNUS)。
  18.  
  19. EMACS 具有 version control 的功能
  20.  
  21. EMACS 对於档案的处理,具有 Outline 的能力。
  22.  
  23. EMACS 具有资料库的处理能力。
  24.  
  25. EMACS 可以提供电子计算机的功能。
  26.  
  27. EMACS 提供了娱乐的环境(game),让工作者可以暂时放下工作的压力。
  28.  
由以上的分析可知,只要进入 EMACS  的工作环境,就可以在
其下完成所有的工作。所以 EMACS 的理想,是离开 EMACS 
就是离开电脑工作的时候,因为它的最终目标,就是要完成一个
以编辑器为轴心的作业系统。
EMACS 所提供的这些功能,都是先唤起代表此功能的
模式modeEMACS 的模式,分成主要模式 major mode
与次要模式minor mode。每一次只能使用一个主要模式,
而且必须要的。但一个主要模式可以搭配一个以上的次要模式。
现在就来简述 EMACS 工作环境的功能,至於如何使用这些 EMACS
的工作环境,本文就不多做介绍。

如何在 Emacs 中执行 Shell 的指令

EMACS 中有两种执行 shell 指令的方法:一种是进入shell command mode, 另一种是进入 shell mode。二者都可以执行 shell 的指令, 其最大不同之处是,进入 shell mode 的状态,执行 shell 指令 的同时,仍可以切换到其它模式处理别的工作,但如果使用 shell command mode,就必须等指令执行完後才可以做 其它的事。 使用 shell command mode 时,使用者在萤幕的最下方 输入欲执行的指令, EMACS 会开启一个名为 ``*Shell command output*'' 的视窗,将 shell 指令执行的结果显示在此视窗中.shell mode 则是执行一个 subshell,其输入与输出都是透过同一个缓冲区, 所以输入与输出是在同一个地方,它不似 shell command mode, 指令输入与结果的显示在不同的地方。 shell command mode 又可以有两种模式,一种 就是很单纯的执行一个 shell 的指令;另一种是对某一特定区域 的资料执行 shell 的指令。 shell command mode 容许 执行後的结果,直接输入到目前所使用的工作区内。有了如此的功能, 使用者可以很轻易的将 shell 指令执行的结果,直接放入适当的 位置,而不需另外从事剪贴的工作。 要如何使用 EMACS 所提供的 shell 功能呢?以下是最基本 的方法,至於高阶的用法则请自行参考 GNU EMACS所提供的 ``GNU Emacs Manual''

  1. shell command mode
  2. shell mode
  3. ESC-x shell\indexESC-x shell 是唤起 shell mode的指令。

有关目录的编辑方法

Dired 是专门针对目录来运作的编辑功能。进入Dired mode 後, EMACS 会根据使用者所指定的目录来列出其下的档案及次目录, 此时可根据需要EMACS 对这些档案及次目录作些运作。 EMACS 所提供可操作 Dired 的种类如下:

  1. 可阅读、编辑 Dired 所列举出来的档案
  2. 操作 Dired 下的档案
  3. (a)Dired 可以删除(delete)档案 此功能可以很容易的将EMACS 的备份档(其档名以 ~结尾)、 暂存档(档名在两个 # 中间)或具某一特殊档名模式的档案 删除。

    (b) 档案的拷贝

    (c) 档名的更新

    (d) 改变档案的 mode

    (e) 改变 giduid

    (f) 档案的列印

    (g) 档案的压缩、解压缩

    (h) 载入、编绎 EMACS LISP file

    (i) 可产生 hard links symbolic links

    (j) 可将档名换成大写或小写的英文字母

  4. 可在 Dired 中执行 shell 的指令
  5. 可使用 UNIX diff 指令比较档案间的异同
  6. 可隐藏次目录
  7. 可使用 find 的公用程式来寻找档案
以上所列举的就是Dired的功能,有人说它类似 PC 上的 PCTOOLS,
读者是否有相同的感觉呢?

进入 Dired 模式的方法很简单,只要键入 
``ESC-x dired''即可。此时的  minibuffer 会显示出如下
的文字:

Dired (directory):

``:'' 之後是目前所在的目录,此时可以修改目录名。确定所要 使用的目录,按下 RET 後,系统会另开启一个视窗来显示此 目录下的所有档案。之後就可以对这些档案做运作。 Dired 所使用 的缓冲区是一个唯读(read-only)的缓冲区,所以 mode line 会出现二个 %% 来表示其为唯读的状态。如果要缓冲区的唯读 状态改为可读,可以键入Ctrl-x Ctrl-q 的指令,将缓冲区的状态改变。 运作此缓冲区有其特别的方法,因此对此缓冲区做编辑并无实质上 的作用。以下就介绍运作 Dired 的方法:


如何编辑远方机器上的档案

EMACS 除了提供了一般编辑器所具有的功能之外,它还提供了 一般编辑器所有的功能,那就是编辑远方 host 的档案。 EMACS 编辑远方 host 的档案,是使用了 ftp 的技巧,将所欲编辑 的档案 ftp 到目前的 host 上,待编辑完毕再以相同的技巧,把档案 ftp 传回远方的 host 而已。 往昔要编辑远方的档案只有两种做法,一是签入(login) 到档案所在的 host 去,另一种就是以 ftp 的方法将档案先传回 目前所在的地方,修改完後再 ftp 回去。 Remote Editing 也可以用到 ``anonymous ftp'' 上,它可以进入 远方的目录下,使用者即可根据需要挑选要 ftp 的档案。 使用 remote editing 的方法非常简单,在键入 `` Ctrl-x Ctrl-f'' 後, 再根据语法给予适当档名, EMACS 就会处理自行 ftp 远方 host 上的档案,其语法如下: Find file:/host:filename host 是指远方 host 的名称, filename 是指存放在远方 host 的档案。例如: Find file:/user1@gate.sinica.edu.tw :.login 就是编辑 host ``gate.sinica.edu.tw'' 的机器,而使用者为 ``user1'',档案的名称为 ``.login'' 的档案。


程式的编辑,编译与测试

EMACS 是一个整合的环境,在提供程式编辑的同时,自然会 提供一个可供程式执行的环境。以下就要谈谈 EMACS 可以为程式 撰写者提供那些服务。 EMACS 对於不同的语言提供不同的编辑模式。 EMACS 提供的服务有程式内缩的安排、括号对应的提示、程式注解的安排、 游标移动的方式与程式的删除等等。基本上,EMACS 是提供一个 撰写程式的格式,只是此格式可根据使用者的需要而自行设计。 EMACS 选择适合的语言模式,是根据所编辑的档案名称附名 来判断的。如附名为 .c C 语言程式,EMACS 会自动给予 C 语言 模式,而不需使用者自行处理。EMACS 提供的程式语言模式有 LISPSCHEMECC++FORTRANMAKEFILEAWKPERLICON MUDDLE 等。 编辑好的程式可以直接进入 EMACS 的编译模式,不需 离开 EMACS UNIX shell 下进行编译的动作。进入 EMACS 的 编译模式很简单,只要键入 ``ESC-x compile'' 即可。 EMACS 预设 的编译指令是 make ,执行 ESC-x compile指令的结果如下所示:

compile command: make -k 若要使用其它的编译器,只需在 ``compile command :'' 的後面 给予适当的编译指令即可,此指令与在 UNIX shell 下使用编译的 方法完全相同。 除了编辑、编译之外,程式撰写者还需要的功能是 Debugger 的提供。EMACS 也提供了此项的服务。 EMACS 提供了四种 debugger,分别为 gdbdbxxdb sdb, 使用者可根据需来选择合适的 debugger。 此处,只将使用 debugger 的指令列举如下:

如何在 Emacs 中列印文件

除了以上的功能外, EMACS 还提供了列印的功能。 EMACS 的列印可针对个整缓冲区或某部份的区域列印,其相关 的指令如下:

  1. ESC-x print-buffer
  2. 列印整个缓冲区的内容。EMACS 处理此工作的方法是先使用 shell pr 指令,而後再使用 shell lpr 列印指令。
  3. ESC-x lpr-buffer
  4. 此指令与上一个指令相似,只是不透过 pr 而直接使用 lpr
  5. ESC-x print-region
  6. ESC-x print-buffer 相似,唯一不同之处在於,此指令只列印 部份的区域。
  7. ESC-x lpr-region
  8. ESC-x lpr-buffer 相似,唯一不同之处在於此,指令只列印 部份的区域。

Emacs 中如何收发信件

EMACS 众多的整合功能中,信件收发的功能自然是不可或缺的。 EMACS 对电子邮件的设计却与一般的电子邮件系统背道而驰, 它是在以编辑为前提的条件下来提供电子邮件的子系统;换言之, 电子邮件为以编辑器为主导的一个子功能。 EMACS 所提供的电子邮件系统分成二个部份,一部分 为发送信件( mail),另一部为收取信件( rmail);收取信件的 同时也能发送信件,它的作法是使用发送信件的功能将信件发送出去。 EMACS 读取电子邮件,是将作业系统存放电子邮件的 档案拷贝至 EMACS 自己的档案中,此档案名为 RMAILEMACS 在读取信件时会至此档(RMAIL)中读取所要的信件。 EMACS 如此设计档案的读取有它的理由,其理由如下:

  1. 作业系统存放电子邮件的格式不一,读取电子邮件的软体 也是变化万千。EMACS RMAIL 就是要将如此复杂的事情简单化。
  2. RMAIL 记录了信件所有的相关资料,但作业系统所提供的 信件档案,并未有做如此详细的记录。
  3. 一般作业系统为了要确保信件读取时的安全性,必需经由 一套繁杂的方法来保障信件读取的安全以及资料的不流失。 EMACS RMAIL 所采取的措失就是既安全又简单。 RMAIL 的方法是,先把存於系统内的信件读出後,再拷贝至 RMAIL 的 档案内,待一切就绪才将存在系统内的信件删掉。如此作的好处 是,即使系统当掉只会使信件多做一份拷贝,也不会有流失信件 的事件发生。
EMACS 对於发送信件与读取信件提供了许多有用的 操作功能,读者可自行参考相关手册,此处只告诉读者如何 进入送信件与读信件的模式:

其它与 Emacs 相关的工作环境

EMACS 除了提供以上种种的工作环境境,还有其它的环境可以运用 ,现在让我们一一道来。

前面已经将 EMACS 可以做的事以及它的特质都做了简要的介绍。 以下就开始讨论 EMACS 的基本要素 - 编辑功能。


回主画面