##はじめに
最近ちまたではpeco
なるものが流行っているようですね。
percol
とか類似してるものもあるようですが、ナウでヤングでエンジニアになるために導入してみることにしました。
しかし、peco
の導入は何やらめんどくさそうな感じ...。
go
も入れてなけりゃシェルもzsh
じゃないです。
でもどうせならbash
でもpeco
を導入してみたいのでやってみました。
##pecoの導入
go
をインストールしなくてもならないと思っていましたが、入れなくてもpeco
は導入出来るようです。
以下の記事を参考にさせて頂きました。ありがとうございます。
例えば、pecoをビルドしない
http://qiita.com/lestrrat/items/de8565fe32864f76ac19
記事にも書いてありましたが、peco
を使うだけならgo
はインストールする必要ないんですね。めんどくさそうだったので良かったです。
##ってかpecoって何できるの?
実はpeco
入れるとかいっておきながらどういう動作が出来るかちょっとよくわかってなかった部分もありました。なので導入後ちょっとお遊び。
参考記事にも載ってましたがこんなかんじに使います。
$ ls -l | peco
こんな風にパイプで渡してみます。するとこんな感じ。
QUERY> IgnoreCase [1/1]
total 32
drwxr-xr-x 2 user staff 68 5 16 2013 Applications/
drwx------+ 8 user staff 272 10 11 16:40 Desktop/
drwx------+ 29 user staff 986 10 8 16:10 Documents/
drwx------+ 640 user staff 21760 10 11 15:54 Downloads/
drwx------@ 24 user staff 816 10 8 23:49 Dropbox/
drwx------@ 67 user staff 2278 9 21 01:16 Library/
drwx------+ 12 user staff 408 9 30 17:06 Movies/
drwx------+ 6 user staff 204 6 3 16:13 Music/
drwx------+ 65 user staff 2210 8 7 23:41 Pictures/
drwxr-xr-x+ 5 user staff 170 5 16 2013 Public/
drwxr-xr-x 6 user staff 204 2 10 2014 VirtualBox VMs/
-rw-rw-rw- 1 user staff 8192 5 16 2013 digi_app.db
drwxr-xr-x 11 user staff 374 10 11 23:04 dotfiles/
drwxr-xr-x 7 user staff 238 8 6 2013 git_box/
ls -l
の結果に対してインクリメントサーチをかけることが出来ます。
サーチはQUERY>
に検索キーワードを入力するとできます。
QUERY> tmux IgnoreCase [1/1]
-rw-r--r-- 1 user staff 60 10 6 19:15 tmux-client-28489.log
-rw-r--r-- 1 user staff 60 10 6 19:15 tmux-client-28547.log
サーチはこんな感じに。選択すると標準出力に出力されます。
$ ls -l | peco
-rw-r--r-- 1 user staff 60 10 6 19:15 tmux-client-28489.log
これを上手く応用すると便利になります。
##peco-historyの実装
とりあえずpeco
を使ってhistory
を便利に使えるようにしたいと思います。
いろいろ記事を見て.bashrc
をいじっていましたが、自分好みに動いてくれず...。
最終的にはこのようになりました。
#pecoの設定
export HISTCONTROL="ignoredups"
peco-history() {
local NUM=$(history | wc -l)
local FIRST=$((-1*(NUM-1)))
if [ $FIRST -eq 0 ] ; then
history -d $((HISTCMD-1))
echo "No history" >&2
return
fi
local CMD=$(fc -l $FIRST | sort -k 2 -k 1nr | uniq -f 1 | sort -nr | sed -E 's/^[0-9]+[[:blank:]]+//' | peco | head -n 1)
if [ -n "$CMD" ] ; then
history -s $CMD
if type osascript > /dev/null 2>&1 ; then
(osascript -e 'tell application "System Events" to keystroke (ASCII character 30)' &)
fi
else
history -d $((HISTCMD-1))
fi
}
bind -x '"\C-r":peco-history'
コードはこちらの記事を参考にさせて頂きました。ありがとうございます。
Mac で bash でも peco-history を使いたい
http://qiita.com/yungsang/items/09890a06d204bf398eea
こちらの記事のコードでは、
bind '"\C-x\C-r":"peco-history\n"'
というキーバインドを設定していましたが、自分は
bind -x '"\C-r":peco-history'
こういうふうに変更しました。
また、その他の記事も参考にさせて頂いたのですが、最終的にコマンドラインに候補を出力するのみにしました。
理想とは若干違いますがこれでhistory
を便利に活用出来るようになりました。
##おわりに
私はbash
を使っていますがzsh
使いが周りに多くなってきました。
もうちょっとbash
使って不便になったらzsh
にしようかなーと思ってます。
みなさんはどうでしょうか?
bash
使いの方よければ参考にしてみてください。