Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
猛拉到系统:tmux内部的neovim内部的ssh_Ssh_Clipboard_Tmux_Neovim - Fatal编程技术网

猛拉到系统:tmux内部的neovim内部的ssh

猛拉到系统: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插

我在这里发现了一个类似的问题,但没有一个有效的答案:

我正在使用Gnome终端启动一个ssh会话,将X转发到Debian 10。 如果我启动neovim并复制(yank)文本,那么该文本将被复制到Gnome剪贴板,一切正常

这是.ssh/config的内容:

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会话,它工作得非常好。