[Windows]小众中的小众,全键盘,在wsl下通过cli而不是鼠标与系统剪贴板交互

同时满足使用 wslvim 以及 tmux 条件的话,应该算是小众中的小众了吧?

vimtmux 有自己的剪贴板,但我仍然希望与系统剪贴板进行交互,毕竟咱可是 wsl

wsl 下获得系统级的剪贴板交互其实很简单,因为 wsl 可以直接运行 .exe 文件,所以直接操作复制和粘贴的 cli interface 程序即可。

shell

复制到系统剪贴板:

cmd | clip.exe
clip.exe < file

当然你也可以在你的 bashrc 里加上这一条 alias copy='_a(){ echo "$1" > temp && clip.exe < temp && rm temp }; _a' 来实现自定义命令。

从系统剪贴板粘贴:

clip.exe cli 程序 refer

将其放在定义了环境变量 PATH 的文件夹内,例如 system32,使得 wsl可以全局访问到。

paste.exe | cmd
paste.exe | cmd | clip.exe
paste > file

vim

定义快捷键即可

map ;y : !/mnt/c/Windows/System32/clip.exe<cr>u
map ;p :read !/mnt/c/Windows/System32/paste.exe <cr>i<bs><esc>l
map! ;p <esc>:read !/mnt/c/Windows/System32/paste.exe <cr>i<bs><esc>l

tmux

同样是绑定快捷键

bind -T copy-mode-vi v  send-keys -X begin-selection
bind -T copy-mode-vi y  send-keys -X copy-selection
bind p paste-buffer

bind -T copy-mode-vi Y  send-keys -X copy-pipe '/mnt/c/Windows/System32/clip.exe'

使用

vimv 框选中要复制的内容 y 是复制到 vim 寄存器内存大家都知道,定义的快捷键 ;y 复制到系统剪贴板。
同理, p 是从寄存器粘贴,;p 是从系统接贴版粘贴。

tmuxv 选中 y 复制到内存,Y 复制到系统剪贴板。

说实话,有点儿没看懂。。。

我本人也用 wsl,而且现在 docker windows 直接集成到了 wsl 上,在 windows 上开发更方便了。我是用的 Terminus 做为客户端,剪贴板管理用的是 Ditto,复制粘贴没遇到什么问题。

哦对了,使用 vscode,搭配 remote wsl 和 remote container 的插件,我在终端上用 vim 都越来越少了,能用 IDE 谁用 vim 啊 :joy:

目标是全键盘,这套方案适用于Windows下任何Terminal,当然很小众就是了。

使用场景,例如 vim 编辑某个文件,要搜索其中一些内容,只要 v ;y 就可以直接复制到系统剪贴板,然后浏览器里直接粘贴搜索;
或者直接cat某个文件内容到剪贴板内;
又例如当开着tmux时,用鼠标框选复制往往是存在乱码或者换行的问题的,用绑定的快捷键就不会。

我也是 IDE 和 vim 一起用,IDE 开发项目 vim 快速修改。
IDE + vim 并不好用,快捷键占用太多反而顾此失彼。
IDE + remote SSH 或者 remote Build/Deployment 也不喜欢,更喜欢保持一致的。

说实话,我写的一些东西由于太小众了(而且只是捞我自己一整套体系里面的一部分),所以我也并没有想要一步一步说清楚先如何 再如何 应该如何 如何更好,毕竟很多东西是见仁见智的,你用你的全键盘、我用我的全鼠标手势,你右手鼠标左手键盘、我偏爱左手鼠标右手打字。

发出来不是想要教大家怎么做,而是给想要折腾这方面的人看到,更多是提供一种思路。