猛拉到系统:tmux内部的neovim内部的ssh
我在这里发现了一个类似的问题,但没有一个有效的答案: 我正在使用Gnome终端启动一个ssh会话,将X转发到Debian 10。 如果我启动neovim并复制(yank)文本,那么该文本将被复制到Gnome剪贴板,一切正常 这是.ssh/config的内容:猛拉到系统:tmux内部的neovim内部的ssh,ssh,clipboard,tmux,neovim,Ssh,Clipboard,Tmux,Neovim,我在这里发现了一个类似的问题,但没有一个有效的答案: 我正在使用Gnome终端启动一个ssh会话,将X转发到Debian 10。 如果我启动neovim并复制(yank)文本,那么该文本将被复制到Gnome剪贴板,一切正常 这是.ssh/config的内容: Host nuc ForwardX11 yes 我有这个。vimrc: set clipboard^=unnamed,unnamedplus 但当我在tmux内部启动neovim时,这就不起作用了。 我使用tmux yank插
Host nuc
ForwardX11 yes
我有这个。vimrc:
set clipboard^=unnamed,unnamedplus
但当我在tmux内部启动neovim时,这就不起作用了。我使用tmux yank插件实现了tmux,这是因为当我在tmux内部从neovim复制然后退出tmux时,我可以通过
xsel-o
如何将选择转发到系统剪贴板?Vim和NeoVim对剪贴板的支持使用到X11服务器的连接。要连接的地址可从环境变量
$DISPLAY
获得
X11和终端多路复用器或会话管理器(如tmux或screen)的问题在于,shell和在其内部运行的程序的环境将是首次创建tmux会话时的环境。其中包括$DISPLAY
变量。因此,这意味着tmux内部的vim将尝试使用创建tmux会话时的X11服务器地址,而不是您刚刚连接的地址
一个肮脏但简单的解决方法是在重新连接到tmux时更新$DISPLAY
变量,以确保连接到正确的X11服务器。请注意,对于在tmux中运行的每个shell或程序,都需要这样做,因为每个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的设置环境
命令)。。。不是吗?它在tmux外部的SSH会话上工作,但在tmux内部不工作吗?我只是想说$DISPLAY在SSH和tmux内部是一样的,这不是解决方案,但我注意到它现在就工作了。这可能是solution@r03有时,您可能会感到“幸运”,因为新连接将有一个匹配的$DISPLAY
。。。但另一方面,您可能会发现它们不匹配,在这种情况下,Vim将无法访问剪贴板……是的,tmux中的另一个窗口有一个空的$DISPLAY值,在那里它不起作用。在设置了正确的值之后,它工作得非常好。谢谢我创建了原始的tmux会话,没有在ssh中使用X转发。之后,我在ssh中使用了X转发,但这意味着现有的windows已经具有错误的显示值。我现在创建了一个新的tmux会话,它工作得非常好。