22.12 前缀命令参数

大多数 Emacs 命令均可使用 前缀参数(prefix argument),即在命令执行前 指定的一个数值。(请勿将前缀参数与前缀键混淆。)前缀参数 始终由一个值表示,该值可以是 nil,表示当前无 前缀参数。每个命令可选择使用或忽略前缀参数。

前缀参数有两种表示形式:原始(raw) 形式与 数字(numeric) 形式。编辑器命令循环内部使用原始形式, 存储该信息的 Lisp 变量同样如此,但命令可请求 使用任意一种形式。

原始前缀参数的可能取值如下:

我们通过对下述函数使用不同前缀调用, 演示这些取值情况:

(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 as C-u 3.)

C-u -   M-x display-prefix  ⊣ -

M--     M-x display-prefix  ⊣ -      ; (Same as C-u -.)

C-u - 7 M-x display-prefix  ⊣ -7

M-- 7   M-x display-prefix  ⊣ -7     ; (Same as C-u -7.)

Emacs 使用两个变量存储前缀参数: prefix-argcurrent-prefix-arg。 诸如 universal-argument 这类为其他命令 设置前缀参数的命令,会将参数存入 prefix-arg。 与之相对,current-prefix-arg 用于将前缀参数 传递给当前命令,因此修改它不会影响后续命令的前缀参数。

通常,命令会在 interactive 声明中 指定使用数字形式还是原始形式的前缀参数。 (参见 使用 interactive。)函数也可直接 通过变量 current-prefix-arg 查看前缀参数, 但这种方式不够规范。

Function: prefix-numeric-value arg

该函数返回合法原始前缀参数 arg 对应的数字含义。 参数可为符号、数字或列表。若为 nil,返回 1; 若为 -,返回 −1;若为数字,返回该数字; 若为列表,返回列表的 CAR(应为数字)。

Variable: current-prefix-arg

该变量保存 当前 命令的原始前缀参数。 命令可直接检查它,但常规获取方式为 (interactive "P")

Variable: prefix-arg

该变量的值为 下一条 编辑命令的原始前缀参数。 诸如 universal-argument 这类为后续命令 指定前缀参数的命令,通过设置该变量工作。

Variable: last-prefix-arg

上一条命令所使用的原始前缀参数值。

下列命令用于为后续命令设置前缀参数。 请勿出于其他目的调用它们。

Command: universal-argument

该命令读取输入并为后续命令指定前缀参数。 除非你明确操作目的,否则请勿自行调用该命令。

Command: digit-argument arg

该命令为后续命令追加前缀参数。参数 arg 为该命令执行前已有的原始前缀参数,用于计算 更新后的前缀参数。除非你明确操作目的, 否则请勿自行调用该命令。

Command: negative-argument arg

该命令为下一条命令添加数字参数。参数 arg 为该命令执行前已有的原始前缀参数, 其值取反后形成新的前缀参数。除非你明确 操作目的,否则请勿自行调用该命令。


emacs

Emacs

org-mode

Orgmode

Donations

打赏

Copyright

© Jasper Hsu

Creative Commons

Creative Commons

Attribute

Attribute

Noncommercial

Noncommercial

Share Alike

Share Alike