大多数 Emacs 命令均可使用 前缀参数(prefix argument),即在命令执行前
指定的一个数值。(请勿将前缀参数与前缀键混淆。)前缀参数
始终由一个值表示,该值可以是 nil,表示当前无
前缀参数。每个命令可选择使用或忽略前缀参数。
前缀参数有两种表示形式:原始(raw) 形式与 数字(numeric) 形式。编辑器命令循环内部使用原始形式, 存储该信息的 Lisp 变量同样如此,但命令可请求 使用任意一种形式。
原始前缀参数的可能取值如下:
nil,表示无前缀参数。其数字值为 1,
但许多命令会区分 nil 与整数 1。
-。表示键入了 M-- 或 C-u -
且未跟随数字。等效数字值为 −1,
但部分命令会区分整数 −1 与符号 -。
我们通过对下述函数使用不同前缀调用, 演示这些取值情况:
(defun display-prefix (arg) "Display the value of the raw prefix arg." (interactive "P") (message "%s" arg))
以下为使用不同原始前缀参数调用 display-prefix 的结果:
M-x display-prefix ⊣ nil C-u M-x display-prefix ⊣ (4) C-u C-u M-x display-prefix ⊣ (16) C-u 3 M-x display-prefix ⊣ 3 M-3 M-x display-prefix ⊣ 3 ; (Same asC-u 3.) C-u - M-x display-prefix ⊣ - M-- M-x display-prefix ⊣ - ; (Same asC-u -.) C-u - 7 M-x display-prefix ⊣ -7 M-- 7 M-x display-prefix ⊣ -7 ; (Same asC-u -7.)
Emacs 使用两个变量存储前缀参数:
prefix-arg 与 current-prefix-arg。
诸如 universal-argument 这类为其他命令
设置前缀参数的命令,会将参数存入 prefix-arg。
与之相对,current-prefix-arg 用于将前缀参数
传递给当前命令,因此修改它不会影响后续命令的前缀参数。
通常,命令会在 interactive 声明中
指定使用数字形式还是原始形式的前缀参数。
(参见 使用 interactive。)函数也可直接
通过变量 current-prefix-arg 查看前缀参数,
但这种方式不够规范。
该函数返回合法原始前缀参数 arg 对应的数字含义。
参数可为符号、数字或列表。若为 nil,返回 1;
若为 -,返回 −1;若为数字,返回该数字;
若为列表,返回列表的 CAR(应为数字)。
该变量保存 当前 命令的原始前缀参数。
命令可直接检查它,但常规获取方式为
(interactive "P")。
该变量的值为 下一条 编辑命令的原始前缀参数。
诸如 universal-argument 这类为后续命令
指定前缀参数的命令,通过设置该变量工作。
上一条命令所使用的原始前缀参数值。
下列命令用于为后续命令设置前缀参数。 请勿出于其他目的调用它们。
该命令读取输入并为后续命令指定前缀参数。 除非你明确操作目的,否则请勿自行调用该命令。
该命令为后续命令追加前缀参数。参数 arg 为该命令执行前已有的原始前缀参数,用于计算 更新后的前缀参数。除非你明确操作目的, 否则请勿自行调用该命令。
该命令为下一条命令添加数字参数。参数 arg 为该命令执行前已有的原始前缀参数, 其值取反后形成新的前缀参数。除非你明确 操作目的,否则请勿自行调用该命令。