We are apologize for the inconvenience but you need to download
more modern browser in order to be able to browse our page

Download Safari
Download Safari
Download Chrome
Download Chrome
Download Firefox
Download Firefox
Download IE 10+
Download IE 10+

日常倒腾环境 之 《剪贴板》

剪贴板大家平时天天用的,毕竟写代码干什么都要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连过去的)