在tmux会话中从vim复制的文本在右侧用空格填充

在tmux会话中从vim复制的文本在右侧用空格填充,vim,copy-paste,tmux,Vim,Copy Paste,Tmux,当我从tmux会话内部运行Vim并将一些文本复制到剪贴板时,每一行都会在右侧填充空格 例如,假设我有这样一个文本文件: ^some$ ^text$ 注意:我使用了^和$分别标记行的开头和结尾。它们不是文件内容的一部分 我启动tmux并在Vim中打开这个文件。我按下Shift键(防止Vim处理鼠标点击),并按住鼠标左键标记完整文本。然后我用Shift+Ctrl+c将其复制到剪贴板 剪贴板中的结果类似于: ^some

当我从tmux会话内部运行Vim并将一些文本复制到剪贴板时,每一行都会在右侧填充空格

例如,假设我有这样一个文本文件:

^some$
^text$
注意:我使用了
^
$
分别标记行的开头和结尾。它们不是文件内容的一部分

我启动tmux并在Vim中打开这个文件。我按下Shift键(防止Vim处理鼠标点击),并按住鼠标左键标记完整文本。然后我用Shift+Ctrl+c将其复制到剪贴板

剪贴板中的结果类似于:

^some                                                  $
^text                                                  $
注意额外的空格。空间的数量取决于端子宽度

如果我在没有tmux的情况下启动Vim,或者如果我只是
cat
文件内容,然后复制它,那么就没有多余的空间了。因此,它必须与Vim+tmux的组合有关。我在不同的Linux版本上看到过,比如Ubuntu和Mint。我在那里使用默认的终端(Gnome终端3.6.2)

那么我怎样才能防止这种情况呢

编辑:My
tmux.conf

set-option -g prefix C-a
set-option -g mouse-utf8 off

set-option -g status-keys vi
set-window-option -g mode-keys vi
set-window-option -g mode-mouse on
set-option -g terminal-overrides 'xterm*:smcup@:rmcup@'

bind-key C-a last-window
bind-key C-h select-pane -L
bind-key C-l select-pane -R

# colors:
set-option -g status-bg black
set-option -g status-fg white
set-option -g status-left '#[fg=green]#H'
set-window-option -g window-status-current-bg red

编辑2:我也尝试不使用上面的
.tmux.conf
,使用tmux的默认设置-没有区别。

Emm,我找到了一个解决方法,将术语从屏幕更改为xterm:

术语=xterm vim

或者在~/.tmux.conf中使用下面的命令

set-g默认终端“xterm”

上面我已经在GNOME终端的本地shell和SecureCRT的远程shell中进行了测试。 如果这仍然不起作用,也许您可以检查您的~/.vimrc或其他全局设置中没有“set t_ut=”,因为我发现这打破了我的解决方法

但在“ManTMux”中,它说

对于在tmux内运行的所有程序,必须将TERM环境变量设置为“screen”。新窗口将自动将“TERM=screen”添加到其环境中,但必须注意不要在shell启动文件中重置此变量

设置在此会话中创建的新窗口的默认终端-术语环境变量的默认值。要使tmux正常工作,必须将其设置为“screen”或其派生值


我不知道这有什么副作用。

经过进一步调查,我找到了问题的根源。这是因为tmux不支持
bce
功能。从:

术语“bce”代表“背色擦除”。现代xterm和rxvt等终端实现背面颜色擦除,而dtterm等其他终端则不实现。(我所知道的大约一半关于实现bce的模拟器)。当应用程序清除屏幕时,执行背景色擦除的终端将保留最后设置的背景色。不执行背景色擦除的终端将背景色重置为默认或初始颜色。在支持背景色擦除的终端上,用单一颜色绘制大部分屏幕的应用程序效率更高。正如ncurses常见问题解答中所指出的那样,在功能标准化方面不可避免地存在权衡和问题。毫不奇怪,ncurses支持xterm的行为

原来的
屏幕
多路复用器具有此功能。我开了一家银行,但不幸的是他们拒绝实施。因此,严酷的事实是:tmux没有解决方案


更新:对于那些检查功能请求的人-祝你好运!作者非常固执己见,反应相当轻率。他完全禁止我进入存储库,因为我敢反驳他一句势利的评论。小心。

你不能在视觉模式下选择文本并执行
“+y
?这会将所选文本拖动到系统剪贴板。谢谢,我不知道这是可能的。但是如果你有一个远程会话,它将不起作用,这是我的主要用例。啊,我明白了。添加空格可能是因为当您选择多行时,它会选择终端屏幕上的所有列,因此会添加空格。这很奇怪。你用的是什么终端模拟器?你能展示你的tmuxconf吗?还有,为什么shift+ctrl+C会复制到剪贴板?你有vim映射吗?还是tmuxconfig?谢谢,这真的很有效。但是现在我对Vim的颜色主题有疑问。例如,背景色现在也停止在行的结尾处。因此我认为,手册页需要将
术语设置为
屏幕
,这是有原因的。不过还是要谢谢你!至少有东西可以玩。