我在远程机器上通过 ssh 连接在 tmux 中使用 Vim。我从多个位置访问远程服务器,包括工作地点和家中。这通常会导致过时的 $DISPLAY 变量和相关问题,我已经解决了大部分问题,除了一个:
如果我已经打开了一个 vim 会话,有没有办法在不关闭并重新打开它的情况下更改它连接到的 X 服务器?我需要能够做到这一点,这样我才能使用 X 剪贴板从 Vim 复制文本片段。我通常会保持多个垂直分割、换行符和行号,因此通过 tmux 执行此操作通常很麻烦,并且更愿意使用 vim 执行此操作。
您可以使用xpra在不同的 X11 服务器上显示正在运行的 X11 程序(特别是 vim)。
该程序适用于 X11 程序,如 GNU screen 或 tmux,适用于终端程序。xpra 提供了一个用于运行程序的 X 服务器,它本身充当 X 服务器的 X 客户端,用于用户的显示。
您提到您正在通过 tmux 运行 vim;您可能应该在 tmux 之外运行 vim 并直接使用 xpra 。据我所知,该程序必须从一开始就通过 xpra 运行。
如果使用 X 的唯一目的是传输大量文本,请考虑使用scp代替。
从 vim 中标记您感兴趣的行并执行:w /tmp/foo
从外壳(或使用ctrl-z
;暂停vim bg
)做
scp your_username@remotehost.edu:/tmp/foo /some/local/directory