【Bash+peco】ターミナルでのコマンド履歴検索を簡単に

コンピュータ関連
スポンサーリンク

少し前、zshのことを調べていた時に、

peco

というものがあることを知りました。

なにやら便利なツールである様子。

フィルタリングツールなのですが、
これを使うと・・・もう元には戻れないかも・・・(?)

スポンサーリンク

pecoとは?

pecoは2014年に開発された、コマンドラインで動作するインタラクティブなフィルタリングツールです。
標準入力されたデータをインクリメンタル検索(入力のたびに即座に候補を表示)して、その結果を出力してくれます。

使用例:

peco
(出典:github.com/peco/peco

ふむ、見るからに便利そう。

何を隠そう、つい先日 HISTCONTROL の存在を知りました。
この値を設定すればそれ以前に入力したコマンドの履歴をうまくコントロールできると。

重複したものを削除するとかね。
つまり矢印キーで巡っても同じものが出てこない。

【HISTCONTROL】ターミナルに入力したコマンドで同じものは履歴に残さない
ターミナルを開いてコマンドを入力する際、 矢印キーの上下で履歴をたどれます。 いちいち入力せずに済むから便利。 ただ同じものが何度も出て来てしまう時がある。 (自分で入力したのだから当前) そのへん上手くやってほしいよ...

そしてさらに、ctrl + r で履歴の検索ができるのもつい先日知ったのです。

これはこれで便利なのですが、pecoの動作Gifの様子が頭をよぎるのです…
入力するたびに候補が絞られていくあの感じ…

で、実はzshじゃなくてはいけないものでもないらしく、
bash4以上なら動いてくれるらしい。

先日せっかくbash5もインストールしたことだし、
pecoもインストールしてみることにしました。

デフォルトで入っているBashのバージョンは 3.2.57(1)-release でした(High Sierra、Mojave)。そのままでは動かないかもなのでご注意を。
スポンサーリンク

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 を押しながら画面を凝視する必要がなくなりました。

便利です。

えがった。えがった。

コメント

タイトルとURLをコピーしました