vim与系统剪贴板直接的复制粘贴

您所在的位置:网站首页 剪贴板本质上是 vim与系统剪贴板直接的复制粘贴

vim与系统剪贴板直接的复制粘贴

2024-07-16 02:19| 来源: 网络整理| 查看: 265

尤其是在写博客的时候,一边用vim看代码,一边写博客,可能需要将代码内容复制到博客中。

1 本机vim交互本机剪贴板

开启剪贴板功能即可

12345" 跟系统剪贴板交互" vim的visual模式下选中的内容 按键y之后 内容既被复制到了vim的寄存器" 也被复制到了系统剪贴板" 系统剪贴板中的内容 在vim的normal模式下 按键p即可以将内容粘贴到vim中set clipboard=unnamed 2 远程机vim交互本机剪贴板2.1 设置本机

本机是mac,添加~/.ssh/config配置文件

本机与远程机建立ssh连接的时候额外建立一条指定端口的通讯,本地机监听在这个端口,等待远程机发送数据过来

本地机收到了数据,将数据写到本地机的剪贴板上

2.2 确认远程机端口转发功能

netstat是net-tool的工具

确认是否已经安装netstat --version

确认是否已经下载yay -Q |grep net-tools

查询yay -Ss net-tools

下载安装yay -Syy net-tools

验证远程机端口转发功能netstat -ntlp | grep -w 22222

2.3 设置远程机vim复制指令

vim的visual模式下检测到TextYankPost指令就将选中内容发送到socket端口上,即通过数据通道从服务机发送到本地。

2.4 本地机启动一个进程监听在端口复制数据到剪贴板

当远程机将数据发送回本地机端口时,本地机启动一个进程监听在该端口,将数据复制到剪贴板。

创建脚本

启动该脚本服务

2.4.1 监听服务

脚本内容如下

123456789101112131415161718192021222324252627 Label localhost.pbcopy ProgramArguments /usr/bin/pbcopy inetdCompatibility Wait Sockets Listeners SockServiceName 22222 SockNodeName 127.0.0.1 2.4.2 脚本服务管理

启动命令 launchctl load -w ~/Library/LaunchAgents/pbcopy.plist

停止卸载命令 launchctl unload -w ~/Library/LaunchAgents/pbcopy.plist

服务状态命令 launchctl list | grep localhost.pbcopy

信息如下,说明该程序正常监听在22222端口,等待数据到来,复制到剪贴板上

2.5 测试

至此,远程端和本机端都已经配置好了

在远程任意文件的vim中复制删除修改内容

nornal模式下的y d c x s的内容

normal模式下yy复制的行内容

visual模式下y复制的块内容

切换到本地机任意应用command+v即可粘贴

但是现在遇到一个问题是中文无法从远程vim的寄存器发送到本机的系统剪贴板上

首先我远程vim的默认复制的内容都会放在unnamed寄存器上

其次我远程vim用的通道ch_open内置函数指定的消息mode是raw

再者远程vim内置函数ch_sendraw发送的内容是获取的unnamed寄存器

我给远程机器系统剪贴板配置了从unnamed寄存器set clipboard=unnamed读取内容,中文的复制粘贴是没有问题的

因此问题很可能是出现在了接收端 不知道是不是在mac端编解码出现了问题

3 本机vim交互远程机剪贴板

本质跟2是一样的,这种场景我用不到,不作赘述。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3