这些天一直在享受 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.0
或 localhost: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/