Linux 版 (精华区)

发信人: howdoit (教练让我上场!!!), 信区: Linux
标  题: EMACSulation
发信站: 哈工大紫丁香 (Tue May 18 08:52:44 1999), 转信

《Linux公报》……让Linux更富魅力!

                     EMACSulation

                       By Eric Marsden翻译 gaia

          本专栏致力于让Emacs这种非凡的文本编辑器发挥更大

      作用.在每一期里,我计划 介绍一种Emacs扩展,它能让你工

      作起来更顺手,让生活更美好.

      为什么缩写这么长?

节省时间的办法

    你可能已经注意到了,为了减少你的键盘输入Emacs颇费了一番心

思.位于最下 面的minibuffer提供了历史机制,你可以重复并编辑以前

的命令;而且当你敲 TAB键时,很多minibuffer提示符尝试补全你键入

的内容.这些功能 是受readline及history库的启发,这些库被用于一

些shell和命令行翻译器 中. 

    这篇文章着重介绍另一种能减少敲键的特性:缩略功能.你是不是

觉得一再输入 同一词组很麻烦,比如你公司的名字或你的电话号码?缩

写能让你更省力.比 如,你可以让Emacs把LAAS自动扩展为 Laboratoire

d'Analyse et d'Architecture des Systèmes.当你在一个缩写后面键 入一

个非"组字"字符时,自动扩展就会发生(比如,键入一个空格.具体什么

字 符是分隔符要视你用什么模式而定). 

    这便是Emacs的缩略机制.你可以使用一个叫abbrev-mode的小模

式,它能让缩写 自动扩展(用M-x abbrev-mode就可以使用这个小模式);

你还可以 在需要时用把光标放在缩写词的后面,用C-x a e扩展它.当

你退出 Emacs时你的缩写词可以被保存在一个文件里,并在你启动

Emacs时自动装入 (你需要用M-x write-abbrev-file命令保存一个缩

写文件,缺省为 ~/.abbrev_defs,或者把write-abbrev-file命令绑到

某个键上): 

  

     

     ;; 如果有缩写文件,读入这个文件

     (if (file-exists-p abbrev-file-name)

        (read-abbrev-file))

定义缩略语

    要想建立缩略语定义,在一个buffer里输入这个缩写词,(比如前面

例子中的 LAAS ),按 C-x a i g,然后在minibuffer里输入你想让它扩

展成的文本.这个有点神秘的步 骤创建了一个全局缩略词,它在所有模

式下都起作用.试着输入这 个缩写词,然后用C-x a e (e 即 expand(扩

展)).Emacs还允许你创建只在指定模式下才起作用的缩写 词,这时要

按C-x a i l(这个buffer应该已经在正确的模式下了 ).M-x

list-abbrevs列出当前定义的所有缩写词. 

邮件缩略

    从其发展的早期,Unix邮件程序就允许用户在~/.mailrc文件里创建

email别名( aliases).邮件缩略机制读入这个文件的内容,定义缩略

词,当你用Emacs编写邮件时 ,这些缩写将在To:和Cc: 域被扩展 .下面

是一个 ~/.mailrc 文件中创建别名(alias)的格式: 

    alias dsssl        dssslist@mulberrytech.com

    alias cohorts      rabah jarboui almeida behnia

    alias bond         "James Bond <bond@guerilla.net>"

    当然还有其它更复杂的地址簿系统,比如Jamie Zawinski的 BBDB,

但它们不能和其 它mail程序共享别名.在你的~/.emacs文件里写入如下

内容,你就 可以在任何时候用Emacs编写email时激活mail-abbrev小模

式: 

  

     

     ;; 如果你使用 XEmacs就不必要下面这一行了

     (add-hook 'message-setup-hook 'mail-abbrevs-setup)

动态缩略

    标准的缩略功能要求你专门登记你的缩略词,这对于你每星期都要

输入的词当 然很好,但对于只在一个文件里出现的文字就很麻烦

了.Emacs还支持 动 态缩略,试图根据上下文猜测你正输入的词.用某

些语言编程时最好 使用长变量名,这时这种功能就十分有用了:你只需

输入这个变量一次,以后 只要输入前几个字母再按 M-/, Emacs将试图

补齐变量名. 

    简单地说,动态缩略机制把光标前的词作为前缀,搜索以这个前缀

开头的距离最 近的词,先是检查当前buffer内位于光标前的词,然后是

位于光标后的词,最 后是所有其它buffer.如果存在几种可能的扩展,

(即 你输入的文字 并非唯一确定的前缀),按 M-/ 将按顺序遍历所有

可能性.按 SPC M-/你可以补齐包含几个字的短语. 

    vi的忠实用户也许对一个用户的痛苦经历感兴趣,他试图在vi里部

分地实现动态缩略(dabbrevs)的功能. 

Completion

    Completion软件包是Jim Salem开发的,功能上与动态缩略相似,但

激活它的热 键不同(M-RET),算法也不一样.在搜索要补齐的文本时,它

不是从 当前buffer中距离最近的一个开始,而是从你最近输入的文字

里搜索(如果没 有找到,再回过头从打开的buffer里找).在你退出

Emacs时,一个你最近使用 过的词的历史记录自动被保存下来.为了激

活completion(你可以用它替代动 态缩略,也可以二者都用),把下面几

行写入你的~/.emacs: 

  

     (require 'completion)

     (initialize-completions)

Hippie Expand

    minibuffer的文件名补齐功能在节约敲键次数方面干得相当不错.

你也许希望 在普通buffer里也能这样.不必等很久了:奇妙的

hippie-expand包就提供了这种特性. 

    Hippie-expand由Anders Holst开发,是一种相当出色的缩略机制,

可以进行许多 种不同的动态缩略.它可以依据以下几种搜索方式执行

扩展: 

      文件名:如果你键入 /usr/X然后击扩展键,以上文本将被扩展为 

      /usr/X11R6/; 

      严格的行匹配:在当前buffer里搜索出前半部分与当前正输入的

      行匹配的行并补齐; 

      像动态缩略一样,搜索当前buffer的内容,若没有则搜索其它

      buffer; 

      kill-ring里的内容 (kill-ring是Emacs的一个环形缓冲区,用来

      存储你 杀死(kill)的文本,或者按MacOS的术语叫"剪切(cut)".

      你不仅能用M-y 来遍历kill-ring中的内容,更可以用

      hippie-expand功能从被杀死的文本中寻找扩展文本. 

缺省情况下 Hippie-expand并不激活,所以你需要把它绑缚到某个键

上.下面是我用的: 

  

     (define-key global-map (read-kbd-macro "M-RET") 'hippie-expand)

下一次...

    下个月我将介绍Emacs里的框架插入( skeleton insertion)和模

板机制.有关评论,更正或建议(什么是你喜欢的Emacs独有的软件包?)

请与我联系<emarsden@mail.dotcom.fr> C-u 1000 M-x hail-emacs ! 

    PS: Emacs并不局限于在Linux上使用,因为许多其它操作系统(及

一些只能作半吊子操作的系统)上也有Emacs的实现.然而,作为自由软

件的旗帜之一,作为最强大,复杂和可定制的系统之一,我觉得应该在 

Linux公报中介绍它.  

EMACSulation #1, February 1998 

EMACSulation #2, March 1998 

EMACSulation #3, April 1998 

EMACSulation #4, June 1998 

EMACSulation #5, August 1998  

                       版权所有 (C) 1999 NJLUG

           出版于第36期《Linux公报》1999年1月 中文版第三期

                            

  

  


--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: bin@mtlab.hit.edu.cn]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.932毫秒