2009年10月26日星期一

Emacs缩写词功能

尝试 Emacs 自带的缩写词功能


打开 minor-mode abbrev-mode 之后,就可以使用缩写词功能了。可以定义全局的缩写词,也可以定义只针对某一个 mode 的缩写词,这会覆盖掉同名的全局缩写词。

定义缩写词


可以分别使用 C-x a gC-x a l 来定义全局和针对某个 mode 的缩写词,他们会从 minibuffer 读取缩写形式,并把当前光标以前的一个或者几个词作为缩写词的扩展形式,可以通过 C-u 来传递一个数值参数告诉他需要使用几个词。例如,要定义“find outer otter”的缩写为“foo”,先输入“find outer otter”,然后键入 C-u 3 C-x a g f o o <RET> 即可。当用 C-u 传入参数零的时候表示使用选中的区域作为要扩展的形式。反过来,你可以先输入“foo”,然后再键入 C-x a i g 或者 C-x a i l ,通过在 minibuffer 输入扩展后的形式的方法来定义缩写词,这样的方法不用费心用 C-u 去传递参数,相比之下要方便一些。

要删除一个缩写词,只需要给 C-x a g 或者 C-x a l 传递一个负参数即可,它会让你输入要删除的缩写词。另外,还可以通过 M-x kill-all-abbrevs 来删除所有的(包括全局和局部的)缩写词。

使用缩写词


缩写词会在你键入一个不能作为单词的内容的字符的时候得到扩展,换句话说,任何可以作为单词内容的字符都可以作为缩写词的内容。

缩写词扩展的时候会保留大小写状态,例如:“foo”会扩展为“find outer otter”,“Foo”会扩展为“Find outer otter”,而根据 abbrev-all-caps 变量的设定,“FOO”会扩展为“FIND OUTER OTTER”或者“Find Outer Otter”。

在没有打开 abbrev-mode 的时候,也可以通过 C-x a e 来手动扩展光标所在出的缩写词。另外,还可以用 M-x expand-region-abbrevs 来在一个区域进行手工扩展。

假如你定义了一个缩写词“cnst”扩展为“construction”,现在你希望输入 “recnst”并让他扩展为“reconstruction”。直接输入“recnst”是不行的,这个时候 M-'(abbrev-prefix-mark) 就起作用了。输入“re”,然后键入 M-' (这个时候会出现一个连字符)接着再输入“cnst”,之后再输入空格之类的,就可以成功扩展为“reconstruction”了。

有时候不希望缩写词被扩展,这个时候只需要使用 C-q 来输入缩写词后面的那个空格或者标点符号即可。

保存缩写词定义


可以分别用 M-x write-abbrev-fileM-x read-abbrev-file 来保存和加载缩写词定义。如果没有提供文件名,他们会使用变量 abbrev-file-name 所提供的文件名,默认是 ~/.abbrev_defs 。另外,如果 save-abbrevs 不为 nil 的话,Emacs 在保存所有文件的时候(例如 C-x s 或者 C-x C-c 的时候)也会把缩写词保存到 abbrev-file-name 所指定的文件中去。

没有评论:

发表评论