有没有办法让Vim重新连接到不同的X服务器?

xqkwcwgp  于 2022-11-11  发布在  其他
关注(0)|答案(4)|浏览(238)

我在远程机器上通过ssh连接在tmux内部使用Vim。我从几个位置访问远程服务器,包括工作和在家。这通常会导致$DISPLAY变量失效和相关问题,其中大部分问题我都解决了,除了一个:
如果我有一个已经打开的Vim会话,有没有办法在不关闭和重新打开它的情况下改变它连接到哪个X服务器?我需要能够做到这一点,这样我就可以使用X剪贴板从Vim复制文本片段。我通常会保持多个垂直拆分,换行符和行号,所以通过tmux做这件事通常是一个巨大的麻烦,我宁愿用Vim做。

w8biq8rn

w8biq8rn1#

您可以使用xpra来显示不同X11服务器上正在运行的X11程序(具体地说,vim)。
xpra提供了一个X服务器来运行程序,而它本身则充当了X服务器的X客户端,用于用户的显示。
您提到正在通过tmux运行Vim;你也许应该在tmux之外运行vim,直接使用xpra。据我所知,程序必须从一开始就通过xpra运行。

sf6xfgos

sf6xfgos2#

有一个相对较新的命令xrestore,它可以执行以下操作:

:xrestore :0

https://groups.google.com/g/vim_dev/c/G54XTJHAqXI
https://github.com/vim/vim/issues/3649

7gyucuyw

7gyucuyw3#

如果使用X的唯一目的是传输大量文本,请考虑改用scp
从vim中标记出你感兴趣的线,然后做:w /tmp/foo
从shell(或使用ctrl-z暂停vim; bg)做

scp your_username@remotehost.edu:/tmp/foo /some/local/directory
hs1rzwqc

hs1rzwqc4#

我 在 服务 器 上 的 ~/.tmux.conf 中 添加 了 以下 代码 行 , 并 在 那里 重新 加载 了 tmux 会话 。 当 我 使用 SSH 从 多 个 本地 客户 端 连接 到 tmux 会话 时 , 这个 单行 程序 会 自动 连接 到 本地 X 服务 器 。 每个 本地 客户 端 都 有 自己 的 X 服务 器 ( 在 我 的 例子 中 是 X410 ) 。

set-option -g update-environment " DISPLAY"

中 的 每 一 个
它 是 如何 工作 的 ? 根据 this post , 该行 应该 刷新 所有 窗格 的 $DISPLAY 变量 。 下面 是 另 一 个 related post
设置 : 我 的 所有 本地 客户 端 都 是 Windows 10 机器 , 运行 WSL ( Pengwin 发行 版 为 WSL2 ) 。 我 的 X 服务 器 是 从 Windows 商店 下载 的 X410 。 托管 Tmux + vim 会话 的 服务 器 是 Linux Mint 机器 。 在 服务 器 上 , Tmux 版本 是 3.3a
根据 我 的 工作 流程 , 这 意味 着 很多 , 尤其 是 我 不必 重复 以下 步骤 :1 . 从 另 一 台 本地 机器 执行 SSH ; 2 . 发现 剪贴 板 不 起 作用 ; 3 . 保存 工作 , 退出 Vim ; 4 . 在 当前 的 Tmux 会话 中 启动 一 个 新 的 窗格 , 5 . 再次 启动 Vim , 试图 加载 回 我 所在 的 位置 。

相关问题