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



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

如果您的终端仿真器支持剪贴板集成功能 (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;x1bx1b]52;;'.encodedText.'x1bx1b\\x1b\" > /dev/tty'
else
let executeCmd='echo -en "x1b]52;;'.encodedText.'x1b\" > /dev/tty'
endif
call system(executeCmd)
redraw!
endfunction
command! OscCopy :call OscCopy()

要点

你需要做两件事。

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

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

    $ ssh -X user@hostname
    

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

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

适用于 osc52 的插件

它应该解决问题

最新更新