33.8 删除环

移除函数(Kill functions)与删除函数类似,都会移除文本,但会将文本保存起来,以便用户通过取回(yanking)操作重新插入。 这类函数的名称大多以 ‘kill-’ 开头。 与之相对,名称以 ‘delete-’ 开头的函数通常不会保存文本用于取回(尽管仍可撤销),它们是纯粹的删除函数。

大多数移除命令主要用于交互式场景,此处不做介绍。 我们主要说明用于编写这类命令的底层函数。 你可以使用这些函数实现移除文本的命令。 若在 Lisp 函数内部需要出于逻辑目的删除文本,通常应使用删除函数,以免干扰删除环内容。See 删除文本

被移除的文本保存在删除环(kill ring)中,供后续取回使用。 这是一个列表,可保存多次最近移除的内容,而非仅最后一次。 称之为 “环(ring)”,是因为取回操作会按循环顺序遍历其中元素。 该列表存储在变量 kill-ring 中,可使用常规列表函数操作;本节还会介绍专门将其作为环形结构处理的专用函数。

有人认为 “kill” 一词的用法并不恰当,因为此处的操作 并不会 真正销毁被移除的内容,这与现实世界中死亡不可逆转形成鲜明反差。 因此也有人提出其他比喻,例如 “剪切环(cut ring)”,更容易让经历过纸笔剪刀剪贴时代的人理解。 不过如今这一术语已难以更改。