33.6 删除文本

删除指移除缓冲区中的部分文本,且不将其保存到删除环。see 删除环。 被删除的文本无法被取回,但可以通过撤销机制重新插入。see 撤销。 某些删除函数在特定特殊情况下会将文本保存到删除环。

所有删除函数均作用于当前缓冲区。

Command: erase-buffer

此函数删除当前缓冲区的全部文本(并非仅可访问部分),使其为空。 若缓冲区为只读,则触发 buffer-read-only 错误;若其中部分文本为只读,则触发 text-read-only 错误。 否则,它会直接删除文本而不要求确认。返回 nil

通常,从缓冲区删除大量文本会因缓冲区大幅缩小而禁止后续自动保存。 但 erase-buffer 不会这样做,其设计思路是后续文本与原有文本并无关联,其大小不应与之前文本比较。

Command: delete-region start end

此命令删除当前缓冲区中 startend 之间的文本,并返回 nil。 若光标原本位于被删区域内,删除后其值为 start。 否则,光标会像标记一样随周围文本一起重定位。

Function: delete-and-extract-region start end

此函数删除当前缓冲区中 startend 之间的文本,并返回包含刚刚删除文本的字符串。

若光标原本位于被删区域内,删除后其值为 start。 否则,光标会像标记一样随周围文本一起重定位。

Command: delete-char count &optional killp

此命令删除光标后紧接着的 count 个字符;若 count 为负,则删除光标前的字符。 若 killp 非空,则将被删字符保存到删除环。

在交互式调用时,count 为数字前缀参数,killp 为未处理的前缀参数。 因此,若提供了前缀参数,文本会被保存到删除环;若未提供,则删除一个字符且不保存。

返回值始终为 nil

Command: delete-backward-char count &optional killp

此命令删除光标前紧接着的 count 个字符;若 count 为负,则删除光标后的字符。 若 killp 非空,则将被删字符保存到删除环。

在交互式调用时,count 为数字前缀参数,killp 为未处理的前缀参数。 因此,若提供了前缀参数,文本会被保存到删除环;若未提供,则删除一个字符且不保存。

返回值始终为 nil

Command: backward-delete-char-untabify count &optional killp

此命令向后删除 count 个字符,并将制表符转换为空格。 当下一个要删除的字符是制表符时,会先替换为保持对齐所需数量的空格,然后删除其中一个空格而非制表符。 若 killp 非空,命令会将被删字符保存到删除环。

仅当 count 为正时,才会执行制表符转空格。 若为负,则直接删除光标后 −count 个字符。

在交互式调用时,count 为数字前缀参数,killp 为未处理的前缀参数。 因此,若提供了前缀参数,文本会被保存到删除环;若未提供,则删除一个字符且不保存。

返回值始终为 nil

User Option: backward-delete-char-untabify-method

此选项指定 backward-delete-char-untabify 如何处理空白字符。 可选值包括:untabify(默认值,将制表符转为多个空格并删除一个)、 hungry(一次删除光标前所有制表符与空格)、 all(删除光标前所有制表符、空格与换行), 以及 nil(对空白字符不做特殊处理)。