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本身会将未转译的,容易引起混淆的字符高亮,以提醒你添加反斜杠。你同样可以在诸如空格、制表符、换行符、换页符前添加反斜杠转译,但通常使用上述的语法会让代码更容易阅读。
最后更新于
这有帮助吗?