SSH 会话中 TMUX 中的系统剪贴板 Vim

System Clipboard Vim within TMUX within SSH session

我在 ssh 会话中 vim 打开了 tmux。如何让 vim 使用笔记本电脑的系统剪贴板作为默认的复制粘贴?默认 set clipboard=unamed 不起作用。两个系统都是 Ubuntu 以防万一。

你需要做两件事。

  1. 在您的远程系统上,安装支持剪贴板的 Vim(以及支持剪贴板所需的 X 依赖项):

    $ sudo apt-get install vim-gtk
    
  2. 在您的本地系统上,启动启用 X11 转发的 ssh 会话:

    $ ssh -X user@hostname
    

    有关 X11 转发的安全隐患,请参阅 $ man ssh

剪贴板集成功能 (PASTE64/OSC52) 如果您的终端仿真器支持,它会很有帮助。比如iTerm2是支持的(我不确定Ubuntu)。

将此功能添加到您的 "remote" .vimrc。 猛拉一些东西然后 运行 :OscCopy。即使在 tmux 会话中也能正常工作。

function! OscCopy()
  let encodedText=@"
  let encodedText=substitute(encodedText, '\', '\\', "g")
  let encodedText=substitute(encodedText, "'", "'\\''", "g")
  let executeCmd="echo -n '".encodedText."' | base64 | tr -d '\n'"
  let encodedText=system(executeCmd)
  if $TMUX != ""
    "tmux
    let executeCmd='echo -en "\x1bPtmux;\x1b\x1b]52;;'.encodedText.'\x1b\x1b\\\x1b\" > /dev/tty'
  else
    let executeCmd='echo -en "\x1b]52;;'.encodedText.'\x1b\" > /dev/tty'
  endif
  call system(executeCmd)
  redraw!
endfunction
command! OscCopy :call OscCopy()

gist

对于 osc52 副本,有可用的插件:

Plugin for osc52

应该可以解决问题