【发布时间】:2018-11-30 08:29:18
【问题描述】:
Emacs 中的delete-region 命令没有按预期运行。它将区域发送到kill-ring,即使它不应该。
虽然使用delete-backward-char 一次删除一个字符会按预期工作,即它不会将字符发送到kill-ring。 delete-region 将突出显示的文本发送到 kill-ring。请注意,delete-forward-char 也可以正常工作。我通过使用M-x delete-region 直接调用命令来确定有问题的行为。
我只是想删除一个区域而不将该区域的内容发送到kill-ring。这遵循了一连串类似风格的查询。我已经查阅了有关此主题的几篇文章,包括
136581,
637351,
17914475,和
1257365,但建议的解决方案都不起作用,因为它们倾向于通过参考使用 delete-region 命令来解决问题。我还检查了emacswiki 中的相关条目,但这也不能解决问题。
这里是 Emacs 中命令的描述:
delete-region是“C 源代码”中的交互式内置函数。
(delete-region START END)删除
START和END之间的文本。 如果以交互方式调用,则删除点和标记之间的区域。 此命令删除缓冲区文本而不修改终止环。
我的经验是这个描述是不正确的。我在 Ubuntu 18.04 上使用 Emacs 25.2.2。
非常感谢任何帮助。
【问题讨论】:
-
变量
select-enable-primary是否被设置为t?这是我能想到的唯一可以解释这种行为的事情。这意味着无论何时您选择一个区域,它都会被添加到杀戮环中,无论您之后是否删除它。 -
你能复制从
emacs -Q开始的问题吗? -
@phils 说了什么。
delete-region不会将文本复制到kill-ring。您的设置中的某些东西导致它这样做 - 可能是您的 init 文件中的某些东西,但可能是您的site-lisp.el文件中的某些东西,甚至可能是您的 Emacs 构建中的某些东西(不太可能,因为它会被报告)。从emacs -Q开始质疑您的初始化文件。如果这不是问题,请检查site-lisp.el。如果这不是问题,请使用M-x report-emacs-bug报告问题。 -
非常感谢。 @phils 和@Drew 都是完全正确的。当我使用
emacs -Q时不会出现问题。 -
然而,关于@legoscia 的建议,我在我的 .emacs 文件中找不到任何提及
select-enable-primary的内容。如果你愿意,我可以发布它,但它很长,因为我多年来积累了很多命令。