鸟哥今天发表了一篇文章《使用OSC52实现iTerm2远程pbcopy》,讲解了如何用 PHP 程序在服务器上拷贝数据到本机/当前电脑剪贴板的方法。 正好这两天也有同事问到我怎么实现这个能力,所以这里整理一下。
目的:能够在服务器上复制文本到当前电脑的剪贴板内,即共享剪贴板。
注意,这个能力是服务器进程直接能操控当前电脑的剪贴板,而不是直接用鼠标在终端模拟器上选择复制。 不同之处在于,终端里面全部是字符,用鼠标选择复制,可能会选中不想要的字符,比如 VIM 的行号等。 再比如文件太长的时候,不易用鼠标直接选择所有文本。
实现方式在鸟哥的文章里面已经比较详细地说明了,而且写了一个兼容性脚本。 但是由于我的服务器上没有 PHP,所以我把它改成了 Bash 脚本。没有做完整的兼容性测试,有问题再修复。
Gist 地址:https://gist.github.com/movsb/30beb738148f971865c1d28947fed9e5
1 2 3 4 5 6 7 8 9 10 11 12 |
|
写入到标准输入的东西会全部复制到当前电脑的系统剪贴板。
同时,别忘了开启 iTerm2 的:Preferences,General,Selection,Application in terminal may access clipboard.
参考
- A guide on how to copy text from anywhere, including through SSH, with OSC52 : vim
- Copying to clipboard from tmux and Vim using OSC 52
- fcpg / vim-osc52
- aymanbagabas/go-osc52: Golang terminal ANSI OSC52 wrapper. Copy text to clipboard from anywhere.
2021-07-15 更新
如果你在服务器上使用 Tmux 的话,使用 Tmux 的 copy-mode 复制的内容,能直接复制到当前电脑的系统剪贴板,无需使用上面的脚本。
同样记得开启终端模拟器的系统剪贴板访问能力。
2021-09-16 更新
最近把开发环境部署在了云端,通过 VSCode 的 Remote-SSH 开发,结果发现 VSCode 不支持此功能。使用脚本也不行,我抽空提个单。
2024-12-16 更新
VsCode 已经支持。