You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Terminal通过SSH连接远程Linux主机时,将Vim中的文本复制到本地macOS剪贴板?

如何在Terminal通过SSH连接远程Linux主机时,将Vim中的文本复制到本地macOS剪贴板?

嘿,我完全懂你这种折腾半天没解决的郁闷!之前我也遇到过一模一样的场景——用Mac Terminal SSH到远程Linux,Vim明明显示+clipboard但就是没法把内容弄到本地剪贴板,试了各种帖子都不对症,因为大多都是说本地Vim的情况。下面给你几个亲测有效的方案,你可以根据自己的情况选:

方案一:用X11转发(需要本地装XQuartz)

你已经装了带+clipboard的vim-gtk,而vim-gtk依赖X11环境,所以只要开启SSH的X11转发,就能让远程Vim的剪贴寄存器和本地macOS的剪贴板打通:

  • 先在本地Mac上装XQuartz(现在Mac原生不再自带X11了),装好后重启你的Terminal.app。
  • 打开XQuartz,点击顶部菜单栏的「XQuartz」→「偏好设置」→「安全性」,勾选「允许来自网络客户端的连接」,然后重启XQuartz。
  • 用带X11转发参数的命令连接远程主机:ssh -X your-remote-user@remote-host(或者用-Y,权限更宽松)。
  • 现在在远程Vim里用*5yy Yank内容,应该就能直接出现在你的macOS系统剪贴板里了!

方案二:用终端OSC 52序列(无需X11,更轻量)

如果不想折腾XQuartz,这个方法更适合你——利用终端支持的OSC 52控制序列,直接把远程Vim里的内容发送到本地剪贴板,Terminal.app(macOS 10.15+)和iTerm2都支持这个:

你只需要在远程主机的Vim配置文件(~/.vimrc)里加一段配置:

" 把*寄存器的内容通过OSC 52发送到本地终端剪贴板
function! SendToLocalClipboard()
    let content = @*
    " 把内容Base64编码后用OSC 52序列发送
    let osc52 = printf("\033]52;c;%s\a", substitute(base64_encode(content), '\n', '', 'g'))
    call chansend(v:stderr, osc52)
endfunction

" 映射*y命令自动触发发送
nnoremap <silent> "*y :let @*=y<CR>:call SendToLocalClipboard()<CR>
vnoremap <silent> "*y :y<CR>:call SendToLocalClipboard()<CR>

保存配置后重启Vim,现在你用*5yy Yank内容时,内容就会自动通过终端序列发送到本地macOS剪贴板了。

方案三:终端直接选中复制(临时应急)

其实你用pico能直接选了复制,本质是终端的原生选中功能——如果你不想改配置,也可以在Vim里先切换到「可视模式」选中内容,然后按住Option键用鼠标精准选中,再按Cmd+C复制,这样也能把内容弄到本地剪贴板。不过这个方法不如前两种用Vim Yank命令来得顺手,但应急没问题。

另外,你提到用pico当workaround,确实它默认就是让终端接管选中,所以更省心,但Vim的灵活性还是没法比的,搞定上面的配置后就能舒服用Vim了~

备注:内容来源于stack exchange,提问作者Rich

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 09:08:00