Vim 失去通过 SSH 复制到客户端剪贴板的能力

Vim 失去通过 SSH 复制到客户端剪贴板的能力

我已经将 vim 设置为能够将文本从 vim 服务器实例拉到我客户端操作系统上的剪贴板(通过 SSH 连接)。
基本设置是

  • 客户端
    • gnome 终端
  • 服务器端
    • 带有 X11 会话转发的 SSH 例如ssh -Y <user>@<server>
      • 多路复用器
        • vim gtk

在服务器上运行的 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 指针)。事情是这样的:

  1. 假设本地和远程的 bashrc 相同
  2. 使用 tmux-ssh 连接到远程站点。它需要普通的 ssh(1) 参数,例如 -p 和 -u。它基本上在远程站点上调用 tmux-x-attach()
  3. tmux-x-attach() 启动 xpra 服务器(如果没有运行),然后附加到正在运行的 xpra 服务器并提交给 tmux-attach()
  4. tmux-attach() 将要么
    1. 如果不存在则启动一个新的 tmux 会话
    2. 附加到(单个)运行的 tmux 实例
    3. 提示要附加到多个 tmux 会话中的哪一个
  5. 分离时,我们会退回到 tmux-x-attach,它会在 ssh 会话终止之前与 xpra 分离
  6. 如果 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; }

相关内容