将文本存储在列表中

文本从缓冲区被剪切后,会存储在一个列表上。连续剪切的多段文本会依次加入列表,列表大致形如:

("a piece of text" "previous piece")

可以用 cons 函数,将一段文本(用行话说是一个 “原子(atom)”)与已有列表构造成新列表:

(cons "another piece"
      '("a piece of text" "previous piece"))

执行该表达式后,回显区会出现一个三元素列表:

("another piece" "a piece of text" "previous piece")

配合 carnthcdr 函数,可以取出任意一段文本。例如下面的代码中,nthcdr 1 … 返回去掉第一个元素后的列表,再用 car 取出该剩余部分的第一个元素,即原列表的第二个元素:

(car (nthcdr 1 '("another piece"
                 "a piece of text"
                 "previous piece")))
     ⇒ "a piece of text"

当然,Emacs 中的实际函数要更复杂。剪切与取回文本的代码需要让 Emacs 识别你想要列表中的第几个元素。此外,当遍历到列表末尾时,Emacs 应该回到列表开头,而不是返回空值。

存储这些文本片段的列表称为 删除环(kill ring)。本章会先逐步分析 zap-to-char 函数的工作原理,再讲解删除环及其用法。该函数会调用另一函数,进而调用操作删除环的函数。可以说,我们先登小山,再攀高峰。

后续章节会介绍如何取回从缓冲区剪切的文本。See Yanking Text Back