使用OSC52实现iTerm2远程pbcopy
最高效的码字方式,一定有一个特点,那就是手指离开键盘的次数尽可能的少。 并且手指码字的时候的在键盘的跨度尽可能的短, 这也是我认识不少老牌程序员用Vim也不用ESC, 而是使用ctrl+[, 甚至还有这:
从而避免手指在键盘上的跨越幅度太大。
我一直用MacBook做工作用机,也一直用iTerm2来登陆远程服务器开发,因为PHP是一个比较巨大的工程,编译速度很慢,自己的笔记本再高配,也是做不到make -j不卡死的。
言归正传, 在mac上有一个很有用的命令pbcopy, 它能让我们避免去使用鼠标选择文本,复制到剪贴板。从而让我们的双手可以一直在键盘上,但很可惜的是,pbcopy只能在本机使用,而我大量的时间都是使用远程机。
最近发现了一个很有趣的OSC 52,也就是 ANSI escape code 中的 ESC ] (Operating System Command), 中的52, 它提供了访问访问本地剪贴板的能力。
它的形式为:
echo -e "\e]52;c;$(base64 <<< php)\a"
也就是,以\e]52;c;开头,然后是base64 encode后的内容,以\a结尾, 如果terminal支持,那么上面例子中的文字“php”就会进入到你的剪贴板了,你就可以使用command + V粘贴了。
对于我常用的iTerm2来说, 只要打开这个选项即可:
有了这个,那么我们就可以很容写出一个支持远程服务器的pbcopy了, 以PHP为例:
#!/bin/env php <?php $data = trim(file_get_contents("php://stdin")); echo "\033]52;;", base64_encode($data), "\007";
然后给这个文件增加执行权限, 重命名成pbcopy,试试:
echo "osc52 codes" | ./pbcopy
然后command+v粘贴下试试?
这下就香很多了,避免了需要用鼠标来选择复制一些text。 让手可以一直在键盘上,极大提升生产力!
然而,我现在开始用iPad办公了, 目前为止还没有发现iPad下的terminal App有支持OSC 52的。 大家要是发现哪个App支持,一定留言告诉我哈。 :)