33.8.4 粘贴相关函数

本节介绍用于粘贴的高级命令,主要面向用户,同时也可在 Lisp 程序中使用。 yankyank-pop 均遵循 yank-excluded-properties 变量 与 yank-handler 文本属性(see 取回文本)。

Command: yank &optional arg

该命令在光标前插入剪切环首部的文本。它使用 push-mark(see 标记点) 在该文本开头设置标记,并将光标置于文本末尾。

arg 为非空列表(用户交互时输入不带数字的 C-u 即会出现此情况), 则 yank 按上述方式插入文本,但会将光标置于粘贴文本之前,标记置于其后。

arg 为数字,则 yank 插入最近第 arg 次剪切的文本—— 即剪切环列表中从首部开始循环计数的第 arg 个元素,首部在此视为第一个元素。

yank 不会修改剪切环内容,除非所粘贴文本来自其他程序,此时会将该文本 压入剪切环。但若 arg 为非 1 的整数,则会旋转剪切环,使本次粘贴的字符串 移至首部。

yank 返回 nil

Command: yank-pop &optional arg

当紧跟在 yank 或另一个 yank-pop 之后调用时,该命令会将刚刚从剪切环 粘贴的条目替换为剪切环中的另一条目。在此种调用方式下,选区中包含上一个粘贴命令 刚插入的文本。yank-pop 会删除该文本,并在其位置插入另一部分剪切文本。 它不会将删除的文本加入剪切环,因为该文本已存在于剪切环中。但它会旋转剪切环, 使新粘贴的字符串移至首部。

argnil,则替换文本为剪切环中的上一个元素。若 arg 为数值, 则替换为向前第 arg 个剪切内容。若 arg 为负数,则替换为更近的剪切内容。

剪切环中的剪切内容序列是循环的,因此重复调用 yank-pop 到达最旧的剪切内容后, 下一个即为最新内容,最新内容的前一个则是最旧内容。

该命令也可在非粘贴命令之后调用。此时它会在迷你缓冲区中提示选择剪切环条目, 支持补全,并将剪切环元素作为迷你缓冲区历史记录(see 迷你缓冲历史)。 用户可通过此方式交互式选择剪切环中记录的历史剪切内容。

返回值始终为 nil

Variable: yank-undo-function

若该变量非空,则函数 yank-pop 会使用其值而非 delete-region 来删除上一次 yankyank-pop 插入的文本。其值必须是接受两个 参数(当前选区的起始与结束位置)的函数。

函数 insert-for-yank 会根据 yank-handler 文本属性中的 undo 元素自动设置该变量(若存在)。