这些天一直在享受tmux + vim,除了我每次都无法解决的一个问题。
这是一个易于重现的剪贴板故障。 Vim的“+ y”+ p,从剪贴板复制或粘贴,如果我创建一个新的tmux会话并在Linux机器上或通过ssh(我使用支持X11转发的MobaXterm)从Windows继续使用它,效果很好。但是,从一侧切换到另一侧后,复制和粘贴肯定会停止工作。
我试图搜索但找不到答案,但也许我使用了错误的关键字。任何提示都将不胜感激。
答案 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.0
或localhost: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)
我仍然在寻找更好的解决方案,但我找到了一些解决方法。
:mksession
:qall
vim -S
当vim开始备份时,剪贴板集成再次工作。