tmux + vim,从Windows到Linux机器的ssh重新附加后剪贴板失败

时间:2016-09-22 14:27:08

标签: vim ssh x11 tmux

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

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

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

3 个答案:

答案 0 :(得分:1)

就像bydsky说的那样。在使用旧的运行 vim 重新附加 Tmux 会话之后。只需在 vim 中运行 :xrestore Ex 命令即可恢复 X11 连接。

答案 1 :(得分:0)

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

当您在Linux计算机上本地运行tmux时,它会将DISPLAY设置为默认值,最有可能是:0。这告诉X11程序使用本地X服务器。 Vim剪贴板集成使用该X服务器进行剪贴板存储,使用+寄存器(在您的配置中,基于您的问题;它也可以使用*寄存器,基于Vim的clipboard选项设置为)。

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

当你启动tmux时,它将使用{em>最初启动时设置的任何DISPLAY 。如果您分离并稍后从其他计算机重新连接,则tmux将不会自动更改DISPLAY。因此,如果您最初从Linux启动tmux会话,然后从Windows启动并重新连接会话,则tmux(以及在其中运行的Vim)仍将使用Linux显示。

一种选择是退出Vim,根据需要执行export DISPLAY=:0(或DISPLAY=:10.0),然后重新启动Vim。请注意,您必须在已打开的每个shell中执行此操作,如果打开新窗口/窗格,它仍将继承父tmux会话的DISPLAY设置。

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

执行此操作

可能有一种方法可以在运行时更改tmux会话的DISPLAY值,但我不知道该怎么做。如果你能找到出路,你可以通过tmux attach的包装器自动完成它。 This answer to a tmux question可能会有所帮助,但我只是执行上述操作之一。

答案 2 :(得分:0)

我仍然在寻找更好的解决方案,但我找到了一些解决方法。

  1. 使用:mksession
  2. 保存您的vim会话
  3. 退出:qall
  4. 使用vim -S
  5. 重新加载vim会话

    当vim开始备份时,剪贴板集成再次工作。