在过去的几章中,我们介绍了一个宏和相当多的函数和特殊形式。这里对它们进行简要描述,以及一些尚未提到的类似函数。
eval-last-sexp
评估光标前的最后一个符号表达式。除非在调用该函数时使用参数,否则该值将打印在回显区域;在这种情况下,输出将打印在当前缓冲区中。通常,此命令绑定到 C-x C-e。
defun
定义函数。此宏最多有五个部分:名称、传递给函数的参数的模板、文档、可选的交互声明和定义的主体。
例如,在Emacs中,dired-unmark-all-marks
的函数定义如下。
(defun dired-unmark-all-marks () "从Dired缓冲区中的所有文件中删除所有标记。" (interactive) (dired-unmark-all-files ?\r))
interactive
声明函数可交互使用。此特殊形式后面可能跟着一个包含一个或多个部分的字符串,将信息传递给函数的参数,按顺序。这些部分还可以告诉解释器提示信息。字符串的各部分由新行,即 ‘\n’ 分隔。
常见的代码字符包括:
b
现有缓冲区的名称。
f
现有文件的名称。
p
数值前缀参数。(注意,此处的 p
是小写。)
r
光标和标记,作为两个数值参数,从最小到最大。这是唯一指定两个连续参数而不是一个参数的代码字母。
See 用于 ‘interactive’ 的代码字符 in GNU Emacs Lisp参考手册, 以获取完整的代码字符列表。
let
声明一个变量列表,用于在let
体内使用,并给它们一个初始值,可以是nil
或指定的值;然后评估let
体内的其余表达式,并返回最后一个表达式的值。在let
体内,Lisp解释器看不到与外部绑定的同名变量的值。
例如,
(let ((foo (buffer-name)) (bar (buffer-size))) (message "当前缓冲区是 %s,包含 %d 个字符。" foo bar))
save-excursion
在评估此特殊形式的体之前,记录point和当前缓冲区的值。在评估完体后,恢复point和缓冲区的值。
例如,
(message "我们已经在这个缓冲区中 %d 个字符。" (- (point) (save-excursion (goto-char (point-min)) (point))))
if
评估函数的第一个参数;如果为真,则评估第二个参数;否则,如果存在第三个参数,则评估第三个参数。
if
特殊形式被称为条件语句。Emacs Lisp中还有其他条件语句,但if
可能是最常用的。
例如,
(if (= 22 emacs-major-version) (message "这是22版的Emacs") (message "这不是22版的Emacs"))
<
>
<=
>=
<
函数测试其第一个参数是否小于第二个参数。相应的函数>
测试第一个参数是否大于第二个参数。类似地,<=
测试第一个参数是否小于或等于第二个参数,而>=
测试第一个参数是否大于或等于第二个参数。在所有情况下,两个参数必须是数字或标记(标记表示缓冲区中的位置)。
=
=
函数测试两个参数是否相等,这两个参数都必须是数字或标记。
equal
eq
测试两个对象是否相同。equal
使用“相同”一词的一种含义,而eq
使用另一种含义:如果两个对象具有相似的结构和内容,例如同一本书的两个副本,则equal
返回真。另一方面,eq
返回真,如果两个参数实际上是同一个对象。
string<
string-lessp
string=
string-equal
string-lessp
函数测试其第一个参数是否小于第二个参数。同样功能的较短名称(defalias
)是string<
。
string-lessp
的参数必须是字符串或符号;排序是词法的,因此大小写是敏感的。使用符号的打印名称而不是符号本身。
空字符串,即‘""’,即不包含字符的字符串,小于任何包含字符的字符串。
string-equal
提供相应的相等测试。它的较短名称是string=
。没有与>,>=
或<=
相对应的字符串测试函数。
message
在回显区域打印消息。第一个参数是一个字符串,可以包含‘%s’,‘%d’或‘%c’,用于打印紧随其后的参数的值。由‘%s’使用的参数必须是字符串或符号;由‘%d’使用的参数必须是数字。由‘%c’使用的参数必须是ASCII代码数字;它将被打印为具有该ASCII代码的字符。 (其他各种未提到的%-序列未在此提及。)
setq
set
setq
特殊形式将其第一个参数的值设置为第二个参数的值。第一个参数由setq
自动引用。它对后续的参数对执行相同的操作。另一个函数set
只接受两个参数,并在设置其第一个参数返回的值之前评估两个参数。
buffer-name
没有参数时,返回缓冲区的名称,作为字符串。
buffer-file-name
没有参数时,返回缓冲区正在访问的文件的名称。
current-buffer
返回Emacs处于活动状态的缓冲区;它可能不是屏幕上可见的缓冲区。
other-buffer
返回最近选择的缓冲区(不包括作为参数传递给other-buffer
的缓冲区和当前缓冲区)。
switch-to-buffer
选择Emacs处于活动状态并在当前窗口中显示的缓冲区,以便用户可以查看它。通常绑定到C-x b。
set-buffer
切换Emacs的注意力到将运行程序的缓冲区。不更改窗口显示的内容。
buffer-size
返回当前缓冲区中字符的数量。
point
返回光标当前位置的值,作为从缓冲区开头计算的整数字符数。
point-min
返回当前缓冲区中point的最小允许值。除非限制了缩小,否则为1。
point-max
返回当前缓冲区中point的最大允许值。除非限制了缩小,否则为缓冲区的末尾。