有没有一种方法可以让Vim重新连接到不同的X服务器?

4
我正在远程机器上通过ssh连接,使用tmux内部的Vim。我需要从多个地点访问远程服务器,包括工作和家庭等。这通常会导致$DISPLAY变量过期及相关问题,其中大多数已经得到解决,但有一个问题没有解决:
如果我已经打开了一个vim会话,是否有一种方法可以更改它所连接的X服务器,而无需关闭并重新打开它?我需要能够通过X剪贴板从Vim中复制文本片段。我通常保持多个垂直拆分、换行和行号,并且通过tmux操作通常很麻烦,因此更希望通过vim实现。
4个回答

4
您可以使用xpra在不同的X11服务器上显示正在运行的X11程序(特别是vim)。
对于像GNU screen或tmux这样的终端程序,此程序可用。 xpra为运行程序提供了一个X服务器,并且本身作为用户显示的X服务器的X客户端。
您提到您正在通过tmux运行vim;您可能应该在tmux之外运行vim并直接使用xpra。据我所知,该程序必须从头开始通过xpra运行。

我不太确定这是否是我想要的... xpra如何帮助我将Vim从不同(可能已死/断开连接)的X服务器切换到我正在连接的服务器? - Yubin Kim
我扩展了我的答案。它的工作方式就像tmux在终端之间切换。 - Gavin Smith

3

第一个链接对我来说坏了。很快就会尝试这个。 - Yubin Kim
感谢:太棒了。通过SSH重新连接到tmux会话时,使用:xrestore :10可以帮助解决尝试(复制、)粘贴时出现的“E353:寄存器中没有任何内容+”问题。 - eMPee584

2
如果只需用 X 传输大量文本,请考虑使用scp
在 vim 中标记您感兴趣的行,然后执行:w /tmp/foo
从 shell(或使用ctrl-zbg 暂停 vim)中执行:
scp your_username@remotehost.edu:/tmp/foo /some/local/directory

不完全正确。我在原问题中误导了你们;实际上,我经常想从vim中复制小片段的文本。通常我保持垂直分割、换行和行号,所以通过tmux这样做通常是一个巨大的麻烦。 - Yubin Kim

0
我在服务器的~/.tmux.conf文件中添加了以下行,并重新加载了tmux会话。这个一行代码可以自动连接到本地X服务器,当我使用SSH从多个本地客户端连接到tmux会话时。每个本地客户端都有自己的X服务器(在我的情况下是X410)。
set-option -g update-environment " DISPLAY"

它是如何工作的?根据这篇文章,该行应该刷新所有窗格的$DISPLAY变量。这里还有另一篇相关文章


设置:我所有的本地客户端都是运行WSL(Pengwin distro作为WSL2)的Windows 10机器。我的X服务器是从Windows商店下载的X410。托管Tmux + vim会话的服务器是Linux Mint机器。在服务器上,Tmux版本是3.3a

根据我的工作流程,这意味着很多。特别是我不必重复以下步骤:1.从另一台本地机器SSH;2.发现剪贴板无法使用;3.保存工作,退出Vim;4.在当前Tmux会话中启动一个新面板;5.再次启动Vim,尝试加载回到之前的位置。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接