Max OS XのTerminal.appでpecoの結果をクリップボードに渡す

Mac OS X用です。MacのTerminal.appでは、pbcopyというコマンドがあり、標準出力をクリップボードに渡してくれます。

pecoは快適なんですが、たとえばhisotryをpecoにわたして、絞り込んでも、

512 git pull

みたいなんが標準出力に帰ってくるだけ*1なので、ちょっとカユいなあと思っていたのです。

で、いろいろしらべてたどり着いた結論がこれ。

peco | ruby -0777 -ne 'print $_.chomp("")' | pbcopy

末端の改行があると、ペーストした瞬間に実行されちゃうので、「ちょっと文字列をいじりたい」みたいなことができない。で、この末端の改行を取り去るのに苦労をしたけど、先人の知恵をお借りして解決。

というわけで、alias化して.bash_profileに。

alias py='peco | ruby -0777 -ne '\''print $_.chomp("")'\'' | pbcopy'

これで

ls | py
ps | py

みたいなんがし放題になりました。

ついでにhisotryがクリップボードに入るときに、あの余分な行番号が消えるように一工夫。これも、.bas_profileに。

alias pecoh='history | tr -s '\'' '\'' | cut -d'\'' '\'' -f3- | sort | uniq | py'

ほんとうは、専用のエイリアスなんか作らずに、

history|py

としたら、渡されたほうで、分岐するといいのだけど、それは将来の宿題。

参考

http://rcmdnk.github.io/blog/2015/08/27/gnu-bsd-linux-mac/
http://d.hatena.ne.jp/zariganitosh/20131216/end_of_file_lf_control
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1351789393


  • *1 といっても、!512できるので、便利ですが

ジャンル: Mac