依赖于系统:ssh内tmux内的neovim

问题描述 投票:1回答:1

我在这里找到了类似的问题,但对我来说却没有有效的答案:System Clipboard Vim within TMUX within SSH session

我正在使用Gnome终端来启动ssh会话,并将X转发到Debian 10。如果我启动neovim并复制(粘贴)文本,那么此文本将被复制到Gnome剪贴板中,一切都很好。

这是.ssh / config的内容:

Host nuc
    ForwardX11 yes

我在.vimrc中有这个:

set clipboard^=unnamed,unnamedplus

但是当我在tmux中启动neovim时,这将不起作用。我有带tmux-yank插件的tmux,这行得通,因为当我从tmux中的neovim复制然后退出tmux时,可以通过xsel -o

看到选定的文本

如何将选择转发到系统剪贴板?

ssh clipboard tmux neovim
1个回答
0
投票
Vim和NeoVim对剪贴板的支持使用到X11服务器的连接。可通过$DISPLAY环境变量获得要连接的地址。

X11和终端多路复用器或会话管理器(例如tmux或屏幕)的问题在于,shell和运行在其中的程序的环境将是tmux会话首次创建时的环境。其中包括$DISPLAY变量。因此,这意味着tmux中的vim将尝试使用创建tmux会话时的X11服务器的地址,而不是现在连接的地址。

肮脏但简单的解决方法是在重新连接到tmux时更新$DISPLAY变量,以确保将连接到正确的X11服务器。请注意,您需要对在tmux内运行的

every shell或程序执行此操作,因为它们每个都将具有其自己的环境变量的不同步副本。

类似于以下作品:

$ ssh -X nuc nuc$ echo $DISPLAY :1234.1 nuc$ tmux attach tmux$ export DISPLAY=:1234.1 tmux$ vim

这将使剪贴板工作

针对该特定Vim

如上所述,如果您有许多tmux窗口和窗格,则必须在所有窗口和窗格上更新$DISPLAY。另外,如果您创建新的窗口或窗格,它们也将以错误的$DISPLAY设置开头(尽管您也可以在tmux的环境中更新$DISPLAY的值以修复新的窗口和窗格,请参阅tmux的set-environment命令以获取相关信息)。那。)
© www.soinside.com 2019 - 2024. All rights reserved.