我在这里找到了类似的问题,但对我来说却没有有效的答案: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
如何将选择转发到系统剪贴板?
$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
这将使剪贴板工作。如上所述,如果您有许多tmux窗口和窗格,则必须在所有窗口和窗格上更新针对该特定Vim
$DISPLAY
。另外,如果您创建新的窗口或窗格,它们也将以错误的$DISPLAY
设置开头(尽管您也可以在tmux的环境中更新$DISPLAY
的值以修复新的窗口和窗格,请参阅tmux的set-environment
命令以获取相关信息)。那。)