缩写(abbrev)是一段字符,可被 展开为更长的字符串。用户可以输入缩写字符串, 该字符串会自动替换为缩写的展开内容。 这能节省输入时间。
当前生效的所有缩写保存在一个 缩写表(abbrev table) 中。 每个缓冲区都有一个局部缩写表,但通常同一主模式下的 所有缓冲区共用一个缩写表。同时还存在一个全局 缩写表。一般情况下两者都会生效。
缩写表以对象数组(obarray)的形式表示。关于对象数组的 信息,参见 See 创建与编入符号。每个缩写 由对象数组中的一个符号表示。符号的名称即为 缩写;符号的值为展开内容;其函数定义为 执行展开的钩子函数(see 定义缩写); 其属性列表单元包含各类附加属性, 包括使用次数与缩写被展开的次数(see 缩写属性)。
某些由主模式而非用户定义的缩写,称为 系统缩写(system abbrevs)。
系统缩写通过非 nil 的 :system 属性标识
(see 缩写属性)。
当缩写被保存到缩写文件时,系统缩写会被忽略。
参见 See 将缩写保存到文件。
由于用于缩写的符号并未在常规对象数组中内化, 它们永远不会作为读取 Lisp 表达式的结果出现; 实际上,通常只有处理缩写的代码会使用它们。 因此,以非常规方式使用这些符号是安全的。
如果启用了次要模式缩写模式,缓冲区局部变量
abbrev-mode 为非 nil,
缓冲区中的缩写会被自动展开。
面向用户的缩写相关命令,
参见 Abbrev Mode in The GNU Emacs Manual。