我在远程机器上通过ssh连接在tmux内部使用Vim。我从几个位置访问远程服务器,包括工作和在家。这通常会导致$DISPLAY变量失效和相关问题,其中大部分问题我都解决了,除了一个:如果我有一个已经打开的Vim会话,有没有办法在不关闭和重新打开它的情况下改变它连接到哪个X服务器?我需要能够做到这一点,这样我就可以使用X剪贴板从Vim复制文本片段。我通常会保持多个垂直拆分,换行符和行号,所以通过tmux做这件事通常是一个巨大的麻烦,我宁愿用Vim做。
w8biq8rn1#
您可以使用xpra来显示不同X11服务器上正在运行的X11程序(具体地说,vim)。xpra提供了一个X服务器来运行程序,而它本身则充当了X服务器的X客户端,用于用户的显示。您提到正在通过tmux运行Vim;你也许应该在tmux之外运行vim,直接使用xpra。据我所知,程序必须从一开始就通过xpra运行。
sf6xfgos2#
有一个相对较新的命令xrestore,它可以执行以下操作:
:xrestore :0
https://groups.google.com/g/vim_dev/c/G54XTJHAqXIhttps://github.com/vim/vim/issues/3649
7gyucuyw3#
如果使用X的唯一目的是传输大量文本,请考虑改用scp。从vim中标记出你感兴趣的线,然后做:w /tmp/foo从shell(或使用ctrl-z暂停vim; bg)做
:w /tmp/foo
ctrl-z
bg
scp your_username@remotehost.edu:/tmp/foo /some/local/directory
hs1rzwqc4#
我 在 服务 器 上 的 ~/.tmux.conf 中 添加 了 以下 代码 行 , 并 在 那里 重新 加载 了 tmux 会话 。 当 我 使用 SSH 从 多 个 本地 客户 端 连接 到 tmux 会话 时 , 这个 单行 程序 会 自动 连接 到 本地 X 服务 器 。 每个 本地 客户 端 都 有 自己 的 X 服务 器 ( 在 我 的 例子 中 是 X410 ) 。
~/.tmux.conf
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 , 试图 加载 回 我 所在 的 位置 。
$DISPLAY
3.3a
4条答案
按热度按时间w8biq8rn1#
您可以使用xpra来显示不同X11服务器上正在运行的X11程序(具体地说,vim)。
xpra提供了一个X服务器来运行程序,而它本身则充当了X服务器的X客户端,用于用户的显示。
您提到正在通过tmux运行Vim;你也许应该在tmux之外运行vim,直接使用xpra。据我所知,程序必须从一开始就通过xpra运行。
sf6xfgos2#
有一个相对较新的命令xrestore,它可以执行以下操作:
https://groups.google.com/g/vim_dev/c/G54XTJHAqXI
https://github.com/vim/vim/issues/3649
7gyucuyw3#
如果使用X的唯一目的是传输大量文本,请考虑改用scp。
从vim中标记出你感兴趣的线,然后做
:w /tmp/foo
从shell(或使用
ctrl-z
暂停vim;bg
)做hs1rzwqc4#
我 在 服务 器 上 的
~/.tmux.conf
中 添加 了 以下 代码 行 , 并 在 那里 重新 加载 了 tmux 会话 。 当 我 使用 SSH 从 多 个 本地 客户 端 连接 到 tmux 会话 时 , 这个 单行 程序 会 自动 连接 到 本地 X 服务 器 。 每个 本地 客户 端 都 有 自己 的 X 服务 器 ( 在 我 的 例子 中 是 X410 ) 。中 的 每 一 个
它 是 如何 工作 的 ? 根据 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 , 试图 加载 回 我 所在 的 位置 。