33.8.2 用于移除文本的函数

kill-region 是移除文本的常用子程序。 任何调用该函数的命令均为移除命令(名称中通常应包含 ‘kill’)。 kill-region 会将新移除的文本加入删除环首项,或追加到最近一项中。 它通过 last-command 自动判断上一条命令是否为移除命令,若是则将文本追加到最近条目。

下文所述命令在将文本保存到删除环前可对其进行过滤。 它们调用 filter-buffer-substring 完成过滤。see 查看缓冲区内容。 默认不进行过滤,但主模式、次要模式及钩子函数可设置过滤规则, 使保存到删除环的文本与缓冲区原文不同。

Command: kill-region start end &optional region

此函数移除 startend 之间的文本; 若可选参数 regionnil,则忽略 startend,直接移除当前区域内文本。 文本被删除并连同属性保存到删除环。返回值始终为 nil

交互式调用时,startend 分别为光标与标记位置,且 region 恒为非空, 因此该命令总是移除当前区域内的文本。

若缓冲区或文本为只读,kill-region 仍会正常更新删除环,随后触发错误而不修改缓冲区。 这一设计很方便,用户可通过一系列移除命令从只读缓冲区复制文本到删除环。

User Option: kill-read-only-ok

若此选项非 nil,当缓冲区或文本为只读时,kill-region 不会触发错误, 仅更新删除环并直接返回,不修改缓冲区。

Command: copy-region-as-kill start end &optional region

此函数将 startend 之间的文本(含文本属性)保存到删除环,但不从缓冲区删除文本。 若可选参数 regionnil,则忽略 startend,保存当前区域内容。始终返回 nil

交互式调用时,startend 分别为光标与标记位置,且 region 恒为非空, 因此该命令总是保存当前区域内的文本。

该命令不会将 this-command 设为 kill-region,因此后续移除命令不会追加到同一项。