从 emacs 控制台模式复制粘贴时删除虚假的结尾空格?

vaa*_*aab 5 bash vim emacs copy-paste

控制台模式下使用emacs,我想从 emacs 复制鼠标选定的文本并将其粘贴到另一个应用程序(可能是另一个术语)。

但是 emacs 会为选择添加完整的空间以填充整个屏幕宽度。

雪上加霜,vim效果完美。我不得不切换到vim(或cat)来做一个简单的复制/粘贴。

作为测试场景,您可以在 emacs 中编写此文本(在控制台模式下运行):

(echo Does it work: \
 true)
Run Code Online (Sandbox Code Playgroud)
  1. 用鼠标选择此文本(两行)。
  2. 将其粘贴到终端,然后按

如果它写道:

Does it work: true
Run Code Online (Sandbox Code Playgroud)

然后它按预期工作(复制粘贴工作),你没有我的问题(为什么?)。但是,在我的电脑上,我看到:

Does it work:
Run Code Online (Sandbox Code Playgroud)

并且缺少“真实”:它失败了,如本期当前所述。

有什么建议吗?

vaa*_*aab 7

在控制台模式下,语法高亮可能会妨碍并生成在您选择的代码中复制的整行“空格”。

检查这是罪魁祸首

要检查这是否是困扰您的问题:

  • 暂时禁用语法高亮M-x global-font-lock-mode
  • 然后尝试复制粘贴,看看您是否仍然可以重现该问题。
  • 确认/确认后,您可以使用相同的命令设置语法高亮。

如果禁用语法突出显示修复了您的复制/粘贴问题,您可能希望阅读以下内容以明确解决此问题。

为什么会这样?

触发该问题的原因是您为某些字体(通常是默认字体)设置了背景颜色。结果,emacs 用空字符填充背景,以便它可以根据需要“绘制”屏幕,并且任何复制粘贴操作都将包含这些虚假的空白。

如何解决?

您应该检查您的面部自定义设置(对于您可以使用的默认字体M-x customize-face <RET> default <RET>),如果您的背景颜色unspecified-bg此不同,这就是罪魁祸首。unspecified-bg是某种透明的背景色,如果您没有自定义它,它实际上是 emacs 的默认背景色。

我们可以unspecified-bg通过~/.emacs在任何自动生成的custom-set-faces块之后添加它来强制在 emacs 启动时使用背景:

(unless window-system
  (custom-set-faces
   '(default ((t (:background "unspecified-bg"))))))
Run Code Online (Sandbox Code Playgroud)

然后要么重启你的 emacs,要么M-x eval-region在这个块上检查结果。

作为旁注,您还将在您的 emacs 中恢复任何花哨的终端背景技巧(我正在考虑透明度或背景图像......)。

注意:即使这样,您可能会因为某些特殊文本中捕获的幽灵空白而感到意外,这会导致字体突出显示不佳。在这些情况下,您可以考虑使用第一个技巧。

关于为什么会发生这种情况的更多解释

终端有自己的背景颜色(有些终端甚至可以允许将图像显示为背景甚至是透明的)。所以对于控制台来说,就像一个没有颜色的颜色(把它看成一个 alpha 通道),这是控制台的默认颜色。

控制台应用程序可以通过 ANSI 转义序列更改字体和背景的颜色。

如果您要求 emacs 更改背景颜色,则它必须使用空白字符人为地绘制屏幕,​​并将其自己的背景颜色设置为您选择的任何内容。

选择时,您经常使用终端复制粘贴功能,完全不知道您正在使用的控制台应用程序。它通过复制粘贴屏幕上的任何字符来完成它的工作,从而复制空白。

请注意,您可以设置允许您的控制台应用程序实际接收鼠标输入并管理选择和复制粘贴。但这并不常见,而且 shell 是终端中最常见的活动应用程序,不支持鼠标。