我已经将 vim 设置为能够将文本从 vim 服务器实例拉到我客户端操作系统上的剪贴板(通过 SSH 连接)。
基本设置是
- 客户端
- gnome 终端
- 服务器端
- 带有 X11 会话转发的 SSH 例如
ssh -Y <user>@<server>
- 多路复用器
- vim gtk
- 多路复用器
- 带有 X11 会话转发的 SSH 例如
在服务器上运行的 vim 版本 -vim-gtk
需要复制到系统剪贴板的额外内容
$ vim --version
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Jan 2 2014 19:40:46)
Included patches: 1-52
Modified by [email protected]
Compiled by buildd@
Huge version with GTK2 GUI. Features included (+) or not (-):
- 操作系统 Ubuntu 14.04
在 vim(在服务器上运行)内,我可以视觉选择文本 - 然后点击", +,y然后我将在我的客户端操作系统剪贴板上提供该视觉选择。
当我连接到服务器并启动新的 tmux 会话时,这是有效的,但是当我在 SSH 中断后重新连接到服务器并重新附加到 tmux 会话时,它会停止工作。任何想法为什么会这样?
答案1
这是我的解决方案(感谢 xpra 指针)。事情是这样的:
- 假设本地和远程的 bashrc 相同
- 使用 tmux-ssh 连接到远程站点。它需要普通的 ssh(1) 参数,例如 -p 和 -u。它基本上在远程站点上调用 tmux-x-attach()
- tmux-x-attach() 启动 xpra 服务器(如果没有运行),然后附加到正在运行的 xpra 服务器并提交给 tmux-attach()
- tmux-attach() 将要么
- 如果不存在则启动一个新的 tmux 会话
- 附加到(单个)运行的 tmux 实例
- 提示要附加到多个 tmux 会话中的哪一个
- 分离时,我们会退回到 tmux-x-attach,它会在 ssh 会话终止之前与 xpra 分离
- 如果 tmux 与内部分离,则会尝试(tput init)来清理终端,例如。维姆
来自.bashrc
tmux-x-attach() {
ps -f -u $USER | grep -v grep | grep -q 'xpra start' || xpra start :9
xpra attach :9 --opengl=no > /tmp/xpra-attach.log 2>&1 &
DISPLAY=:9 tmux-attach "$@"
xpra detach :9
}
tmux-attach() {
case $(tmux list-sessions 2>/dev/null | wc -l) in
0) tmux ;;
1) tmux attach ;;
*)
tmux list-sessions
read -n 1 -p "Select command: " N < /dev/tty > /dev/tty;
tmux attach -t $N
;;
esac
}
tmux-ssh() { ssh "$@" -A -X -t 'PS1=tmux-ssh- ; . ~/.bashrc ; tmux-x-attach'; tput init; }