2.4.3.1 基本字符语法

字符本质上是整数,其打印表示是十进制数字。通常十进制数字也可以作为字符的打印输入,不过这么写容易和整数混淆。因此你应该使用Emacs Lisp提供的特定字符读取语法。这些读取语法以一个问号开头。

某个字母字符的读取语法通常是问号加上该字符;因此,‘?A‘为字符'A'的表示语法,'?B'为字符'B'的表示语法,'?a'为字符'a'的表示语法。

例如

?Q => 81
?q => 113

标点符号字符通常有类似的读取语法。不过若该标点在Lisp中有特殊语法意义,那么你需要用反斜杠'\'将其转义。例如,'?\('为开括号字符的读取语法。类似的,如果你想让Lisp读取字符'\',那么你需要这么写'?\\'。

你可以使用'?\a','?\b','?\t','?\n','?\v','?\f','?\s','?\r','?\d','?\e'分别表示control-g、删除符、制表符、换行符、垂直制表符、换页符、空格、回车、删除、ESC。例如:

?\a ⇒ 7                 ; control-g, C-g
?\b ⇒ 8                 ; backspace, BS, C-h
?\t ⇒ 9                 ; tab, TAB, C-i
?\n ⇒ 10                ; newline, C-j
?\v ⇒ 11                ; vertical tab, C-k
?\f ⇒ 12                ; formfeed character, C-l
?\r ⇒ 13                ; carriage return, RET, C-m
?\e ⇒ 27                ; escape character, ESC, C-[
?\s ⇒ 32                ; space character, SPC
?\\ ⇒ 92                ; backslash character, \
?\d ⇒ 127               ; delete character, DEL

这类由反斜杠开头的序列也称为转义序列,其中开头的反斜杠起到转译的作用;这里的转义和ESC字符没啥联系(英文中两种都写作Escape)。'\s'通常在字符常量中使用,在字符串常量中,直接敲空格就行。

反斜杠对于不需要转译的字符是无害的,被允许使用的。因此'?\+'和'?+'是等价的。绝大多数的字符前都不要使用反斜杠。但是你必须在字符'()[]\;"'以及'|'`#.,'前加上反斜杠,以防歧义。你必须在前文提到的 Unicode 字符前加上反斜杠,以防止误导阅读你代码的人。Emacs本身会将未转译的,容易引起混淆的字符高亮,以提醒你添加反斜杠。你同样可以在诸如空格、制表符、换行符、换页符前添加反斜杠转译,但通常使用上述的语法会让代码更容易阅读。

最后更新于