日常倒腾环境 之 《剪贴板》
剪贴板大家平时天天用的,毕竟写代码干什么都要Ctrl-C Ctrl-V的嘛(y、p的嘛)
目前我的环境是Windows 10 + WSL + Ubuntu 18.04 VM。为了我使用方便我把WSL和Ubuntu 18.04配置成了完全一样的环境。
在平时我会用原生的Console使用WSL,顺便又写了个小程序包装了一下ssh链接并进入当前路径这套操作,这样就可以非常顺滑的同时使用WSL和Ubuntu 18.04了
针对于平时要用的tmux,我又魔改了一下让他和Windows原生Console的操作模式相同(左键选择、回车复制、右键粘贴)。但是这个有个严重的问题,WSL或者Ubuntu里面开tmux的时候,剪贴板都会和外面的Windows主机隔离。
网上的很多教程说可以利用按住Shift键来让Windows Console忽略掉Terminal对鼠标的捕捉,从而按照原来的Console的操作模式执行。但是这样在Tmux竖向分屏的时候就会导致复制的时候跨越多个窗口,复制出来的内容也会带有回车,需要手动处理
今天的我突发奇想,想起来X server是有剪贴板的,而之前在WSL里面跑桌面环境的时候用过的VcXsrv似乎是有剪贴板支持的。我又想起SSH是能直接Forward X11的,那我们串起来就可以正常操作了吖
话不多说开始干活ovo
网上一查直接就有个隔壁的小伙伴有跟我一模一样的想法:https://qiita.com/yasuo_utsunomiya/items/0be42999ea9f4abb0d30
顺便还有一大堆教怎么配置PuTTY的:https://www.uxora.com/unix/45-xdisplay-over-ssh-with-putty-xming-vcxsrv
流水账:照着配置完发现并不能用啊,而且还很奇怪我配置完DISPLAY既不是10.0,也不是像他们说的那样DISPLAY为空,反而是一直为0.0,最后发现是我自己在.bashrc里面硬编码了0.0进去(究其根源是我把我WSL的bashrc拷到了Ubuntu里面,WSL是必须手动配置DISPLAY的,但是Ubuntu似乎则是自动配置的)
弄完了之后呢,用xclip或者xsel测试一下就会发现我们的剪贴板成功的传入了,那么接着我们再重新配置一下tmux-yank插件。
这个插件主要是实现复制功能的,粘贴反而没怎么实现,不是很懂他怎么想的。复制的功能安装好xsel或者xclip后会自动设置好,那么左键选择回车复制的功能就可以用了。
现在我们继续弄一下右键粘贴功能。原来的我把邮件bind到了paste-buffer命令上,但是paste-buffer用的是tmux自己的buffer不是X clipboard。
搜了一下似乎也没啥更优雅的选项来控制,倒是找到了一些重新bind的操作:https://www.atjiang.com/pragmatic-tmux-text-and-buffers/ ,照着改一下发现这文章里面的
"tmux set-buffer \"$(xclip -o -sel clipboard)\"; tmux paste-buffer"
$这个符号前面少个反斜杠,应该是
"tmux set-buffer \"\$(xclip -o -sel clipboard)\"; tmux paste-buffer"
改完,把VcXsrv开开就可以享受畅快的复制粘贴体验了。
PS:但是这么配置完呢,实际上每次都会有No xauth data那个Warning,实际上是因为没有添加xauth,执行xauth add :0 . `mcookie`即可,但是这样的话在WSL的bashrc中填入的DISPLAY值就应该相应的变更为localhost:0.0(因为用的不是unix socket而是TCP连过去的)