少し前、zshのことを調べていた時に、
peco
というものがあることを知りました。
なにやら便利なツールである様子。
フィルタリングツールなのですが、
これを使うと・・・もう元には戻れないかも・・・(?)
pecoとは?
pecoは2014年に開発された、コマンドラインで動作するインタラクティブなフィルタリングツールです。
標準入力されたデータをインクリメンタル検索(入力のたびに即座に候補を表示)して、その結果を出力してくれます。
使用例:
(出典:github.com/peco/peco)
ふむ、見るからに便利そう。
何を隠そう、つい先日 HISTCONTROL の存在を知りました。
この値を設定すればそれ以前に入力したコマンドの履歴をうまくコントロールできると。
重複したものを削除するとかね。
つまり矢印キーで巡っても同じものが出てこない。
そしてさらに、ctrl + r で履歴の検索ができるのもつい先日知ったのです。
これはこれで便利なのですが、pecoの動作Gifの様子が頭をよぎるのです…
入力するたびに候補が絞られていくあの感じ…
で、実はzshじゃなくてはいけないものでもないらしく、
bash4以上なら動いてくれるらしい。
先日せっかくbash5もインストールしたことだし、
pecoもインストールしてみることにしました。
pecoのインストール
Readmeに書いてあった Homebrew を使ってのインストールでやってみます。
$ brew install peco Updating Homebrew... ==> Downloading https://homebrew.bintray.com/bottles/peco-0.5.7.high_sierra.bottle.tar.gz ==> Downloading from https://akamai.bintray.com/a8/a8e5c5b29e4650a17a2ac48ff6b25563176f66eaf0a2a0d557b72ba0899ddee1?__gda__= ######################################################################## 100.0% ==> Pouring peco-0.5.7.high_sierra.bottle.tar.gz 🍺 /usr/local/Cellar/peco/0.5.7: 6 files, 4.6MB
でけた。
簡単。
試しに
$ ls -l | peco
と打つと・・・
おぉ、一覧が出た上に、文字を入力するたび絞り込まれていく。
素晴らしい。
history検索に絡める
あとは履歴検索に絡めて使うだけ。
.bashrc(or .bash_profile)に記述
peco_search_history() { local l=$(HISTTIMEFORMAT= history | \ sort -r | sed -E s/^\ *[0-9]\+\ \+// | \ peco --query "$READLINE_LINE") READLINE_LINE="$l" READLINE_POINT=${#l} } bind -x '"\C-r": peco_search_history'
(参考URL:「bashで過去のコマンドを検索する方法3つ」)
参考URLのコードにあった正規表現がうちの環境では動かなかったのでちょっと修正しました。
さらに重複行排除の部分、
sort | uniq |
これは HISTCONTROL を既に設定しているから省略していいかな。
ということでまずは逆順ソートし、その後空白・行番号を削除することで、リストが新しい方から並ぶように変えました。
あとMacでは元々 .bashrc も .bash_profile もデフォルトで存在しません。
自分の場合、.bashrc を作成していなかった。
でもコマンドの履歴検索なんてターミナルを開いて行う以外やらないし、
Macではターミナルを開いた時点でログインシェルになる。
てことは ~/.bash_profile に追記すればいいかなぁと。
まとめ
ということで peco をインストールしてみました。
もうね、動いた時は感動ですよ。
これで目的のコマンドが出てくるまで矢印キーを押しつつ、あるいは、
ctrl + r を押しながら画面を凝視する必要がなくなりました。
便利です。
えがった。えがった。
コメント