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

Sau*_*uri 5 vim ssh tmux

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

小智 5

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

将此功能添加到您的“远程” .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()
Run Code Online (Sandbox Code Playgroud)

要旨


rom*_*inl 4

你需要做两件事。

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

    $ sudo apt-get install vim-gtk
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在本地系统上,启动 ssh 会话并启用 X11 转发:

    $ ssh -X user@hostname
    
    Run Code Online (Sandbox Code Playgroud)

    $ man ssh参阅 X11 转发的安全影响。

  • 不,您不需要*使用*GVim。在 Debian 衍生版本中,“gvim”和“vim”实际上是指向使用不同参数调用的同一二进制文件的链接。安装 `vim-gtk` 包的全部目的是获得一个针对 X11 构建的二进制文件,并启用“剪贴板”功能。因此,将其称为“vim”或“gvim”并不重要:您仍然可以获得剪贴板支持。 (2认同)