28.3 缓冲区名称

每个缓冲区都有一个唯一的名称,该名称是一个字符串。许多操作缓冲区的函数既接受缓冲区作为参数,也接受缓冲区名称作为参数。任何名为 buffer-or-name 的参数均属于此类,如果该参数既不是字符串也不是缓冲区,则会触发错误。任何名为 buffer 的参数必须是实际的缓冲区对象,而非名称。

临时且通常对用户无意义的缓冲区,其名称以空格开头,因此 list-buffersbuffer-menu 命令不会列出这些缓冲区(但如果此类缓冲区关联了文件,则 被列出)。以空格开头的名称还会初始禁用撤销信息的记录;详见 撤销

Function: buffer-name &optional buffer

该函数以字符串形式返回 buffer 的名称。 如果未指定 buffer,则默认使用当前缓冲区。

如果 buffer-name 返回 nil,表示 buffer 已被删除。See 杀死缓冲区

(buffer-name)
     ⇒ "buffers.texi"

(setq foo (get-buffer "temp"))
     ⇒ #<buffer temp>
(kill-buffer foo)
     ⇒ nil
(buffer-name foo)
     ⇒ nil
foo
     ⇒ #<killed buffer>
Command: rename-buffer newname &optional unique

该函数将当前缓冲区重命名为 newname。如果 newname 不是字符串,则会触发错误。

通常情况下,如果 newname 已被使用,rename-buffer 会触发错误。但如果 unique 为非 nil 值,该函数会修改 newname,生成一个未被使用的名称。在交互式调用时,可以通过数字前缀参数将 unique 设为非 nil 值。 (命令 rename-uniquely 就是通过这种方式实现的。)

该函数返回缓冲区实际被赋予的名称。

Function: get-buffer buffer-or-name

该函数返回 buffer-or-name 指定的缓冲区。 如果 buffer-or-name 是字符串且不存在对应名称的缓冲区,则返回值为 nil。如果 buffer-or-name 是缓冲区,则按原样返回该缓冲区;这种用法实用性不高,因此该参数通常传入名称。例如:

(setq b (get-buffer "lewis"))
     ⇒ #<buffer lewis>
(get-buffer b)
     ⇒ #<buffer lewis>
(get-buffer "Frazzle-nots")
     ⇒ nil

另请参见 创建缓冲区 中的函数 get-buffer-create

Function: generate-new-buffer-name starting-name &optional ignore

该函数返回一个可用于新缓冲区的唯一名称——但不会创建该缓冲区。它以 starting-name 为基础,通过在 ‘<…>’ 内追加数字的方式生成一个当前未被任何缓冲区使用的名称。数字从 2 开始递增,直到生成的名称不存在于现有缓冲区中。

如果可选的第二个参数 ignore 为非 nil 值,它应当是一个字符串(潜在的缓冲区名称)。这意味着即使该潜在名称已被现有缓冲区使用,也会将其视为可用名称。因此,若存在名为 ‘foo’、‘foo<2>’、‘foo<3>’ 和 ‘foo<4>’ 的缓冲区:

(generate-new-buffer-name "foo")
     ⇒ "foo<5>"
(generate-new-buffer-name "foo" "foo<3>")
     ⇒ "foo<3>"
(generate-new-buffer-name "foo" "foo<6>")
     ⇒ "foo<5>"

另请参见 创建缓冲区 中的相关函数 generate-new-buffer

Function: buffer-last-name &optional buffer

该函数返回 buffer 在被删除或最后一次重命名之前的名称。如果 buffernil 或被省略,则默认使用当前缓冲区。