函数buffer-name
返回缓冲区的名称;要获取缓冲区本身,需要使用另一个函数:current-buffer
函数。如果在代码中使用这个函数,你将得到缓冲区本身。
名称和名称所指代的对象或实体是不同的。你不是你的名字。你是一个被别人用名字指称的人。如果你要求与George交谈,而有人递给你一张写有字母‘G’、‘e’、‘o’、‘r’、‘g’和‘e’的卡片,你可能会感到有趣,但你不会满意。你不想和名字交谈,而是想和名字所指代的人交谈。缓冲区类似:临时缓冲区的名称是*scratch*,但名称不是缓冲区。要获取缓冲区本身,需要使用诸如current-buffer
这样的函数。
然而,有一个小复杂性:如果在一个表达式中评估current-buffer
,就像我们在这里所做的那样,你所看到的是缓冲区名称的打印表示,而不是缓冲区的内容。Emacs之所以以这种方式工作有两个原因:缓冲区可能有成千上万行长—太长了无法方便地显示;另一个缓冲区可能具有相同的内容但具有不同的名称,区分它们是很重要的。
下面是包含该函数的表达式:
(current-buffer)
如果你在Emacs中通常的方式下在Info中评估这个表达式,#<buffer *info*> 将会出现在回显区。这个特殊的格式表示正在返回的是缓冲区本身,而不仅仅是它的名称。
顺便提一下,虽然你可以在程序中键入数字或符号,但不能在缓冲区的打印表示中这样做:获取缓冲区本身的唯一方式是使用诸如current-buffer
的函数。
一个相关的函数是other-buffer
。它返回除了当前所在的缓冲区之外最近选择的缓冲区,而不是其名称的打印表示。如果你最近在*scratch*缓冲区之间切换,other-buffer
将返回该缓冲区。
你可以通过评估以下表达式来看到这一点:
(other-buffer)
你应该在回显区看到#<buffer *scratch*>出现,或者是你最近切换回来的任何其他缓冲区的名称6。