从控制台复制时的尾随空格

x-y*_*uri 11 vim terminal tmux clipboard whitespace

这是我偶尔在这里和那里遇到的这种烦人的行为:当您在控制台中用鼠标选择文本(即复制它)时,粘贴它,然后意识到每行末尾都有额外的空格。那是,

line 1                                                                          
line 2                                                                          
Run Code Online (Sandbox Code Playgroud)

代替

line 1
line 2
Run Code Online (Sandbox Code Playgroud)

所以,不仅仅是每一行末尾的一个空格。

我无法可靠地重现该问题,也找不到答案。我相信对于某些软件,它会在一段时间后才会显现出来。

但我只注意到,当我打开在同一文件中vim,从控制台第一个路口右转,然后tmux,它的作品了很好的前一种情况。并且不在后者中。考虑到TERM=xterm-256color控制台,并TERM=screen-256colortmux我的猜想是,它与终端不这样做正确,或不使应用程序正确地去做的事情。我猜是一个相当模糊的猜想。所以,第一个问题是,“究竟是什么导致了它?”

另一个是,“我该怎么做?” 最坏的情况是文件位于远程位置。我以前在本地复制它,gedit最近用它打开。现在我应该可以选择在新控制台中打开它(因为我主要在tmux会话中工作),然后从那里复制。这可以做得更简单吗?

当我vimtmuxwith运行时TERM=xterm-256color vim,它的行为很奇怪。就像没有绘制没有文字的背景一样。而且对我来说改变TERM变量似乎不太好(让软件认为它正在处理其他终端)。

编辑本地文件时,我通常做:!gedit %.

Gil*_*il' 4

如果应用程序在该位置显示空格,则从终端进行选择和复制时,您将在行尾看到空格。应用程序可能会显示空格以删除之前的内容。终端有删除整行或删除光标右侧字符的命令;应用程序根据他们认为最有效的方式在显示空间和显示空间之间进行选择。例如,如果您在提示符处输入一些内容,然后按 Backspace,应用程序(例如 shell)可能会用空格覆盖最后一个字符。

如果您有 X11 连接,则可以使用xselxclip将文件复制到本地剪贴板。

实验上,Vim 似乎费尽心思不显示以空格结尾的行(即使缓冲区包含以空格结尾的行)。因此,如果您没有 X11 连接,则可以选择从中复制。

另一种方法是在复制后进行后处理:

xsel | sed 's/  *$//' | xsel
Run Code Online (Sandbox Code Playgroud)