【问题标题】:Emacs: delete-region doesn't deleteEmacs:删除区域不会删除
【发布时间】:2018-11-30 08:29:18
【问题描述】:

Emacs 中的delete-region 命令没有按预期运行。它将区域发送到kill-ring,即使它不应该。

虽然使用delete-backward-char 一次删除一个字符会按预期工作,即它不会将字符发送到kill-ringdelete-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)

删除STARTEND 之间的文本。 如果以交互方式调用,则删除点和标记之间的区域。 此命令删除缓冲区文本而不修改终止环。

我的经验是这个描述是不正确的。我在 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 的内容。如果你愿意,我可以发布它,但它很长,因为我多年来积累了很多命令。

标签: emacs kill-ring


【解决方案1】:

事实上,这很简单。我只需要保留以下两个命令的默认值。

x-select-enable-primary

x-select-enable-剪贴板

为了在 Emacs outside 获得更好的 yank 命令行为,我最终在 Emacs inside 破坏了 yank 命令的行为。我建议新手不要弄乱这些特定的命令,并保持默认值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-31
    • 1970-01-01
    • 1970-01-01
    • 2012-08-26
    • 1970-01-01
    相关资源
    最近更新 更多