一日一技 | SSH 下跨系统连通剪贴板

日期: 2024-05-08 10:03:59|浏览: 73|编号: 65231

友情提醒:信息内容由网友发布,请自鉴内容实用性。

一日一技 | SSH 下跨系统连通剪贴板

终端是许多人日常使用的工具之一。 例如,深度学习是目前的研究热点。 由于训练和推理过程需要强大的GPU,因此研究生共享GPU服务器并通过终端使用SSH连接和编写代码。 公司内的运维人员也需要通过SSH远程访问服务器,对系统或服务进行维护。

在日常操作中,最大的问题是如何优雅地从远程主机复制文本并将其粘贴到本地机器中。

问题:跨平台系统剪贴板被阻止

一般我们无法通过显示器和键盘直接控制远程主机,也没有图形界面。 所有操作都需要通过SSH访问并在终端上操作。

本机和远程主机各有一套自己的剪贴板,命令操作过程中复制的文本只会保存在远程主机的剪贴板中。 那我们不能通过终端的图形界面来选择和复制吗?

上图是一个非常日常的场景。 我们需要从配置文件中复制一行或多行代码。 我们这里选择的工具是VIM。 但当我们真正开始抄袭时,我们会遇到以下困难:

而这些情况也确实困扰了我很长时间。

解决方案:OSC代码

OSC 代表终端程序中使用的传统转义序列表达式。 终端将根据OSC代码定义的文本处理方法来处理其周围的文本。

而恰好有一个定义决定了“如何将内容从终端复制到系统剪贴板”,那就是。

OSC 52一次最多可以接受字节,其中前7个字节是“\033]52;c;”,中间99992个字节是要复制的文本,最后一个字节是“\a”。 需要复制的文本需要编码为表达式,因此实际可用的复制长度为74994字节。

一般74994字节就可以超出普通纯文本的范围,完全可以满足日常复制粘贴的需要。 下一步是思考如何优雅地将 OSC 52 的定义应用到我们的日常工作流程中。

以我常用的两个工作软件为例,一个是用于持久会话的 tmux,另一个是用于编辑文本文件的 vim。 对于其他软件,您可以使用搜索引擎输入软件名称OSC52来获取有效的解决方案。

幸运的是,我通过搜索引擎在互联网上找到了一个开源的 Bash OSC 52 实现。 顺着线索,我进一步找到了@制作的tmux和vim的OSC 52实现。 我要感谢他们的贡献。

首先,我在 ~/.local/bin/ 这个路径下创建了一个名为 yank 的文件,并赋予它执行权限,并将其添加到 PATH 路径中。

#!/bin/sh
# copy via OSC 52
buf=$( cat "$@" )
len=$( printf %s "$buf" | wc -c ) max=74994
test $len -gt $max && echo "$0: input is $(( len - max )) bytes too long" >&2
printf "\033]52;c;$( printf %s "$buf" | head -c $max | base64 | tr -d '\r\n' )\a"

下一步是让VIM实现OSC52。 因为我主要使用它,所以我每天都使用.nvim来管理我使用的插件。 因此,~/./nvim/lua/.lua 中添加了一个依赖项 /vim-。

return require('packer').startup({function(use)
  use 'ojroques/vim-oscyank'
end})

复制动作就是在vim的模式下选择你要复制的文本,使用vim命令:可以快速复制,然后在本机随意粘贴。

在 tmux 中实现 OSC52 页面非常简单。 只需要在~/.tmux.conf中添加一行绑定快捷键Y即可。

# transfer copied text to attached terminal with yank
bind-key -T copy-mode-vi Y send-keys -X copy-pipe 'yank > #{pane_tty}'

使用方法是先触发tmux的热键,依次输入序列:ctrl+b、[、v、y。 其中ctrl+b是tmux的热键,[进入会话冻结状态,即使用vim控制光标,v进入选择模式并选择文本,最后y复制所选文本。 然后您可以将其粘贴到本机上的任何位置。

当然,有时你可能既不打开 tmux,也不使用 VIM。 然后我们也可以直接将文件传递给yank命令,在普通终端环境中进行复制。 具体命令如下:

$ cat your_file.txt | yank

接下来,您只需将其粘贴到本地计算机上即可。

唯一的使用限制

虽然我们有了代码,但是要达到上述效果仍然有两个硬性条件:

OSC 52必须用于在支持OSC的软件或编辑器下传输复制的内容,例如我上面提到的tmux和vim。 当然,这个动作可能需要额外的脚本/插件来辅助,但比手动一一复制要好。

本地终端作为“桥梁”,也必须支持OSC,才能正确传输OSC信息。 因此,我搜索并总结了一些常见平台上终端仿真器软件对OSC 52的支持情况:

最后是一个展示,希望能够帮助所有终端用户提高工作效率。 下次见。

> 下载 2.0客户端,关注公众号,解锁全新阅读体验

> 实用好用的正版软件,少数人为您呈现

提醒:请联系我时一定说明是从浚耀商务生活网上看到的!