gpt4 book ai didi

ssh - 连接到系统 : neovim inside tmux inside ssh

转载 作者:行者123 更新时间:2023-12-02 13:53:32 38 4
gpt4 key购买 nike

我在这里找到了一个类似的问题,但没有对我有用的答案:
System Clipboard Vim within TMUX within SSH session

我正在使用 Gnome 终端启动 ssh session ,将 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 和终端多路复用器或 session 管理器(例如 tmux 或 screen)的问题在于 shell 和在其中运行的程序的环境将是首次创建 tmux session 时的环境。这包括 $DISPLAY多变的。所以这意味着 tmux 中的 vim 将尝试使用创建 tmux session 时的 X11 服务器的地址,而不是您现在刚刚连接的那个地址。

一个肮脏但简单的解决方法是更新 $DISPLAY重新连接到 tmux 时更改变量,以确保您将连接到正确的 X11 服务器。请注意,您需要对在 tmux 中运行的每个 shell 或程序执行此操作,因为它们中的每个都有自己的环境变量的不同步副本。

类似以下的工作:

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

这应该使剪贴板适用于该特定 Vim。

如前所述,如果您有许多 tmux 窗口和 Pane ,则必须更新 $DISPLAY在所有这些。此外,如果您创建新的窗口或 Pane ,它们将以错误的 $DISPLAY 开头。设置也是如此(尽管您也可以在 tmux 的环境中更新 $DISPLAY 的值以修复新窗口和 Pane ,请参阅 tmux 的 set-environment 命令。)

关于ssh - 连接到系统 : neovim inside tmux inside ssh,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61027451/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com