Yank 到系统:neovim inside tmux inside ssh
Yank to system: neovim inside tmux inside ssh
我在这里发现了一个类似的问题,但没有适合我的答案:
我正在使用 Gnome 终端启动 ssh 会话,并将 X 转发到 Debian 10。
如果我启动 neovim 并复制(抽出)文本,那么该文本将被复制到 Gnome 剪贴板,一切都很好。
这是.ssh/config的内容:
Host nuc
ForwardX11 yes
我在 .vimrc 中有这个:
set clipboard^=unnamed,unnamedplus
但是当我在 tmux 中启动 neovim 时,这不起作用。
我有 tmux 和 tmux-yank 插件,这是有效的,因为当我从 tmux 中的 neovim 复制然后退出 tmux 时,我可以看到带有 xsel -o
的选定文本
如何将所选内容转发到我的系统剪贴板?
Vim 和 NeoVim 支持剪贴板使用到 X11 服务器的连接。要连接的地址可从 $DISPLAY
环境变量中获得。
X11 和终端多路复用器或会话管理器(如 tmux 或屏幕)的问题在于,shells 和其中的程序 运行 的环境将是 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 windows 和窗格,则必须更新所有这些 $DISPLAY
。此外,如果您创建新的 windows 或窗格,它们也会以错误的 $DISPLAY
设置开始(尽管您也可以在 tmux 的环境中更新 $DISPLAY
的值以修复新的 windows 和窗格,请参阅 tmux 的 set-environment
命令。)
我在这里发现了一个类似的问题,但没有适合我的答案:
我正在使用 Gnome 终端启动 ssh 会话,并将 X 转发到 Debian 10。 如果我启动 neovim 并复制(抽出)文本,那么该文本将被复制到 Gnome 剪贴板,一切都很好。
这是.ssh/config的内容:
Host nuc
ForwardX11 yes
我在 .vimrc 中有这个:
set clipboard^=unnamed,unnamedplus
但是当我在 tmux 中启动 neovim 时,这不起作用。
我有 tmux 和 tmux-yank 插件,这是有效的,因为当我从 tmux 中的 neovim 复制然后退出 tmux 时,我可以看到带有 xsel -o
如何将所选内容转发到我的系统剪贴板?
Vim 和 NeoVim 支持剪贴板使用到 X11 服务器的连接。要连接的地址可从 $DISPLAY
环境变量中获得。
X11 和终端多路复用器或会话管理器(如 tmux 或屏幕)的问题在于,shells 和其中的程序 运行 的环境将是 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 windows 和窗格,则必须更新所有这些 $DISPLAY
。此外,如果您创建新的 windows 或窗格,它们也会以错误的 $DISPLAY
设置开始(尽管您也可以在 tmux 的环境中更新 $DISPLAY
的值以修复新的 windows 和窗格,请参阅 tmux 的 set-environment
命令。)