系统剪贴板:在SSH会话中的TMUX中使用Vim

7

我在ssh会话中使用tmux打开了vim。如何使vim将我的笔记本电脑系统剪贴板作为默认的复制粘贴?默认设置set clipboard=unamed无效。两个系统都是Ubuntu。


这个关于在SSH中使用剪贴板的回答或这篇博客文章提到如何使用Vim,但是Tmux可能会增加一些额外的麻烦。 - Dan Lowe
3个回答

6

如果您的终端模拟器支持,剪贴板集成功能(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()

代码片段


请注意,某些终端(例如kitty)需要显式设置剪贴板。因此,在上面的示例中,对于这些终端,“52;;”应为“52;p;”。(截至kitty 0.13.3,“p”有效而“c”无效。结果可能有所不同) - VPhantom
嗯,刚刚发现当我选择超过10行时,这个方法会失败。还有其他人遇到过这个问题吗(会短暂闪现错误信息)? - Magnus

4
你需要做两件事情。
  1. On your remote system, install a clipboard-aware Vim (and the X dependencies needed for clipboard support):

    $ sudo apt-get install vim-gtk
    
  2. On your local system, start your ssh session with X11 forwarding enabled:

    $ ssh -X user@hostname
    

    See $ man ssh for the security implications of X11 forwarding.


在这种情况下,我是否必须使用gvim,还是仍然可以使用带有X11转发支持的终端中的vim? - Sauhaarda Chowdhuri
2
不,你不需要使用GVim。在Debian衍生版中,“gvim”和“vim”实际上是链接到同一个二进制文件,并使用不同的参数调用。安装“vim-gtk”软件包的整个目的是获取针对X11构建的二进制文件,并启用“剪贴板”功能。因此,将其称为“vim”或“gvim”并不重要:您仍然可以获得剪贴板支持。 - romainl

0

针对 osc52 复制功能,有可用的插件:

osc52 插件

它应该可以解决问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接