vim - tmux + vim,当从 Windows ssh 到 Linux 机器时重新连接后剪贴板失败

标签 vim ssh x11 tmux

这些天一直在享受 tmux + vim,除了一个我每次都无法解决的问题。

这是一个易于重现的剪贴板故障。 Vim 的“+y”+p,复制到剪贴板或从剪贴板粘贴,如果我创建一个新的 tmux session 并继续在 Linux 机器上或通过 Windows 的 ssh(我使用支持 X11 转发的 MobaXterm)使用它,效果会很好。但是在我从一侧切换到另一侧后,复制和粘贴肯定会停止工作。

我试图搜索但找不到答案,但也许我使用了错误的关键字。任何提示将不胜感激。

最佳答案

这很可能与您的 DISPLAY 有关环境变量。

当您在 Linux 机器上本地运行 tmux 时,它将设置 DISPLAY到默认值,很可能 :0 .这告诉 X11 程序使用您的本地 X 服务器。 Vim 剪贴板集成使用该 X 服务器与 + 一起用于剪贴板存储。注册(在您的配置中,根据您的问题;它也可以使用 * 寄存器,基于 Vim 的 clipboard 选项设置的内容)。

当您使用 X11 转发通过 SSH 登录时,DISPLAY将设置为虚拟服务器,代表转发的连接--很可能 :10.0localhost:10.0 .

当你启动 tmux 时,它会使用任何 DISPLAY设置为初始启动时。如果您从另一台机器分离然后重新连接,tmux 不会自动更改 DISPLAY .因此,如果您最初从 Linux 启动 tmux session ,然后从 Windows SSH 进入并重新连接 session ,tmux(以及在其中运行的 Vim)仍将使用 Linux 显示。

一种选择是退出 Vim,执行 export DISPLAY=:0 (或 DISPLAY=:10.0 视情况而定),然后重新启动 Vim。请注意,您必须在打开的每个 shell 中执行此操作,并且如果您打开一个新窗口/ Pane ,它仍将继承父 tmux session 的 DISPLAY环境。

另一种选择是更改 Vim 内部的环境变量,这样您就不必重新启动 Vim。您可以通过 :let $DISPLAY="whatever" 执行此操作.

可能有一种方法可以更改 tmux session 的 DISPLAY运行时的值(value),但我不知道如何做到这一点。如果您能找到出路,您可能可以通过 tmux attach 周围的包装器将其自动化。 . This answer to a tmux question可能会有所帮助,但我只是执行上述操作之一。

关于vim - tmux + vim,当从 Windows ssh 到 Linux 机器时重新连接后剪贴板失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39641826/

相关文章:

c++ - Linux 透明窗口

vim - 如何在 Vim 中重复诸如更改制表符 `gt` 之类的命令,而无需一遍又一遍地重新输入它们?

linux - 通过 SSH 区分两个远程文件夹

XGetWindowProperty 的窗口类型的正确大小

linux - 在 Linux 上,如何在不同的登录名下从终端 shell 运行 GUI 应用程序?

linux - 如何为 "SSH access without a password"配置远程服务器?

vim - 按 <Enter> 在行首给出 "M"

ruby - VIM 中更好的自动完成功能

vim:将连续的行与当前行左对齐

linux - XDebug 与 PhpStorm : Debugging a CLI script, 通过反向 SSH 隧道连接