Help us understand the problem. What is going on with this article?

Bashでもpeco使いたい

More than 5 years have passed since last update.

はじめに

最近ちまたでは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をいじっていましたが、自分好みに動いてくれず...。
最終的にはこのようになりました。

.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

こちらの記事のコードでは、

.bashrc
bind '"\C-x\C-r":"peco-history\n"'

というキーバインドを設定していましたが、自分は

.bashrc
bind -x '"\C-r":peco-history'

こういうふうに変更しました。
また、その他の記事も参考にさせて頂いたのですが、最終的にコマンドラインに候補を出力するのみにしました。
理想とは若干違いますがこれでhistoryを便利に活用出来るようになりました。

おわりに

私はbashを使っていますがzsh使いが周りに多くなってきました。
もうちょっとbash使って不便になったらzshにしようかなーと思ってます。
みなさんはどうでしょうか?
bash使いの方よければ参考にしてみてください。

omega999
iOSエンジニア 勉強になったらメモします。
iwate-pu
岩手県滝沢市にある公立大学です。Qiitaではソフトウェア情報学部生や出身の人が多いです。
https://www.iwate-pu.ac.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした