如何阻止Emacs"污染"剪贴板?

Hi-*_*gel 6 emacs clipboard editor copy-paste

Emacs始终将已删除/已删除的内容复制到剪贴板.我经常需要将内容复制并粘贴到Emacs中,但是当我在粘贴之前从Emacs中删除现有内容时,我想要粘贴的内容将丢失.

我找到的唯一解决方案是使用

(setq save-interprogram-paste-before-kill t)
Run Code Online (Sandbox Code Playgroud)

为了确保在Emacs之外复制的内容在kill-ring中保持可用,并且具有类似问题的人似乎对此解决方案感到满意.令我困扰的是,我必须输入C-y 一次或多次重复 M-y才能获得我要粘贴的内容.

所以我的问题是:当我杀死/删除它时,如何阻止Emacs将内容复制到剪贴板(不包括删除区域的情况C-w)?

its*_*eyd 7

首先:Emacs有自己的内部"剪贴板",称为" 杀死环 ",它与系统剪贴板分开.

要确保系统剪贴板始终具有您 Emacs 外部复制的最新内容,请添加

(setq x-select-enable-clipboard nil)
Run Code Online (Sandbox Code Playgroud)

到你的.emacs文件.根据Emacs 手册,这将是

防止kill和yank命令访问剪贴板[...].

无论您是否在将内容复制到Emacs之外后都将其杀死,您可以使用该命令x-clipboard-yank剪贴板的内容插入当前缓冲区.如果需要,可以通过以下方式为此命令设置全局键绑定

(global-set-key (kbd "C-c y") 'x-clipboard-yank)
Run Code Online (Sandbox Code Playgroud)

如有必要,请C-c y使用您选择的键绑定进行替换.

  • x- 前缀变量现在已过时。请改用 select-enable-clipboard 等。 (3认同)

unp*_*680 5

这两个设置可以防止 X 剪贴板污染。所有杀戮环在 Emacs 中都保持完整。

  (setq x-select-enable-clipboard nil)
  (setq x-select-enable-primary nil)
Run Code Online (Sandbox Code Playgroud)