Elisp 入门
叶文彬 (wenbinye@gmail.com)
2007 年 7 月 17
ii
前言
emacs 的高手不能不会 elisp。但是对于很多来说 elisp 习是一个痛苦的历程,至少我是有这
样一段经历。现在,我的 elisp 也算有 成了,所以斗胆 这样文章为后来者提供一点捷径。
Hello World 子
二
2.1 函数和变量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2 局部用域的变量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3
lambda 表达式 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.4 控制结构 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.5 逻辑运算 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.6 函数列表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
三 Œ 型—Œ字
3.1 测试函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2 数的比较 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.3 数的换 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.4 数的运算 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.5 函数列表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.6 变量列表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Œ 型二──字符字符
4.1 测试函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.2 构造函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.3 串比较 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.4 换函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.5 格式化串 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.6 查找和替换 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.7 函数列表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Œ 型三── cons cell
5.1 测试函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.2 构造函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.3 把列表当数用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.4 把列表当堆栈用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Elisp 入门, c 2007 (wenbinye@gmail.com)
1
3
3
4
5
5
7
7
9
9
10
10
11
12
13
15
16
16
16
17
18
18
19
21
22
22
23
25
iii
iv
5.5 重排列表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.6 把列表当集合用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.7 把列表当关联表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.8 把列表当树用 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.9 遍历列表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.10 其它常用函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.11 函数列表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.12 问题解答 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Œ 型──序Œ组
6.1 测试函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2 列的通用函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.3 数操 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.4 函数列表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.5 问题解答 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Œ 型──符
7.1 创建号 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.2 号的成 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.3 函数列表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.4 问题解答 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
求
9.1 buffer-local 变量 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.2 变量的用域 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.3 其它函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.4 变量习惯 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.5 函数列表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.6 变量列表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9.7 问题解答 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
…Œ命
10.1 参数列表的语 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
26
26
28
28
28
29
30
33
33
34
34
35
35
37
37
38
40
40
43
45
45
46
48
48
49
49
49
51
51
10.2 关于文档串 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.3 调用函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.4 宏 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.5 令 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.6 函数列表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.7 变量列表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10.8 问题解答 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
“
11.1 与 Perl 正则表达式比较 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11.2 语表格和类表格简介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11.3 几个常用的函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11.4 函数列表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11.5 令列表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
二 作──区
12.1 缓冲的 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.2 当缓冲 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.3 创建和关闭缓冲 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.4 在缓冲内移动 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.5 缓冲的内 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.6 改缓冲的内 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.7 函数列表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.8 问题解答 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
三 作二──
13.1 割窗口 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13.2 除窗口 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13.3 窗口配置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13.4 择窗口 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13.5 窗口大 息 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13.6 窗口对应的缓冲 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13.7 改变窗口显示域 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13.8 函数列表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
v
52
52
53
54
57
58
58
61
61
62
62
63
63
65
65
65
66
67
68
69
69
71
75
75
77
77
77
78
79
80
80
vi
13.9 问题解答 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
81
作三──
14.1 打开文件的过程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14.2 文件读 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14.3 文件 息 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14.4 改文件 息 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14.5 文件操 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14.6 临时文件 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14.7 读目录内 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14.8 神奇的 Handle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14.9 函数列表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14.10 问题解答 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
85
85
85
86
88
88
89
90
90
91
92
97
Hello World 子
从 K&R 以来,hello world 程 历来都是程 语教程的第一个例。我也用一个 hello
world 的例来示 emacs 里执 elisp 的环境。下就是这个语句:
(message "hello world")
我有说这个一个程 ,这是因为,elisp 不好为可执 式来运 (当也不是不
可能),所有的 elisp 都是运 在 emacs 这个环境下。
首先换到 *scratch* 缓冲里,果当模式不是 lisp-interaction-mode,用 M-x lisp-
interaction-mode 先换到 lisp-interaction-mode。后输这一 语句。在 尾右括号后,
按 C-j 键。果 Minibuffer 里显示 hello world,光标一 也显示“hello world”,那说你的操
有问题。我就可以开始 elisp 习之旅了。
:elisp 里的一个完整表达式,除了简单数据类 (数,向量),都是用括号括起来,称
为一个 S-表达式。 elisp 解释器执 一个 S-表达式除了一种之外,还可以用 C-x C-e。
它的别是,C-x C-e 是一个局按键绑定,几乎可以在所有地都能用。它会将运 回值
显示在 Minibuffer 里。这里 要调一个概念是回值和用是不同的。比 message 函
数它的用是在 Minibuffer 里显示一个串,但是它的回值是“hello world” 串。
Elisp 入门, c 2007 (wenbinye@gmail.com)
1
2
Hello World