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毫秒