bhCLIツール

うろ覚えのまま、 あのコマンドに戻る。

bh は ~/.bash_history をあいまい検索し、よく使うものと最近使ったものを上に寄せて並べるターミナル用のツールです。Ctrl-R の代わりに割り当てられます。

入力した文字が強調された候補が並ぶ bh の検索画面

前に打ったコマンドを探すとき、こんなことが起きていませんか

Ctrl-R は打った文字列がそのまま並んでいないと一致せず、うろ覚えでは出てこない
Ctrl-R を連打して遡っているうちに、目的のコマンドを通り過ぎたのか分からなくなる
打ち間違いや一度きりのコマンドが混ざって、いつも使うものが埋もれる
使わなくなったコマンドを消すには、.bash_history を自分で開いて編集するしかない
bh なら

覚えている文字を、順番だけ合わせて打つ。

覚えている断片を打つだけで、履歴が打つそばから絞り込まれます。文字が飛んでいても順番さえ合っていれば一致するので、コマンドを思い出しきる必要がありません。

REASON

bh が効く理由

01断片だけで、目的のコマンドに届く

入力した文字が順番どおりに現れるコマンドを拾う、fzf 方式のあいまい検索です。文字が連続している、単語の先頭にある、コマンドの先頭に近い、といった一致ほど上に出ます。入力がそのまま含まれる完全一致は、常にあいまい一致より上に並びます。

入力した文字が飛び飛びに強調された候補一覧
02並び順が、実際の使い方に従う

最近使ったかと、何回使ったか。この 2 つからコマンドごとにスコアが決まり、高い順に並びます。1 回しか打っていないコマンドは大きく下げられるので、打ち間違いが上位に居座りません。何も入力していない状態では、2 回以上使ったコマンドだけが並びます。

何も入力していない状態で、よく使うコマンドが上位に並んだ一覧
03履歴を、探したその場で減らせる

選んでいるコマンドは C-x で ~/.bash_history から消せます。Tab で複数まとめて選んでからでも構いません。削除は必ず y/N の確認をはさむので、探しているつもりが消していた、ということが起きません。

複数のコマンドを選択し、削除の確認プロンプトが出ている画面
FUNCTION

主な機能

? キーで開く、キーバインド一覧のオーバーレイ
あいまい検索gtp と打てば git push、gpl と打てば git pull。文字が飛んでいても順番さえ合っていれば見つかり、一致した文字がその場で強調されます。
直近性と使用頻度で並べる最近使ったかと、何回使ったかを合わせて順位を決めます。1 回しか打っていないコマンドは大きく下げられるので、打ち間違いが上に来ません。
候補が多いときだけノイズを落とす候補が 20 件を超えたときだけ低スコアを切り、20 件以下なら全部見せます。絞り込めているのに候補が消える、ということが起きません。
複数選択して削除Tab で複数のコマンドを選び、C-x でまとめて ~/.bash_history から消せます。単体で選んでいるときはそのコマンドだけが対象です。
Ctrl-R への差し替え.bashrc に数行足すだけで Ctrl-R を bh に置き換えられます。パイプにつなぐと選んだコマンドを標準出力に返し、そのまま起動したときは選んだコマンドをそのシェルで実行します。
手が覚えている操作上下移動は ↑ / ↓ に加えて C-p / C-n / C-k / C-j、半ページ送りは C-u / C-d、行編集は C-a / C-e / C-l。? を押せばキー一覧がその場で開きます。

動かすために必要なものと、履歴の扱い

ソースコード
MIT ライセンスでコードを公開しています。具体的な処理はリポジトリで確認できます。
動作環境
配布しているバイナリは Apple Silicon の Mac 向けです。ほかの環境では cargo install --path . でソースから入れられます。
入れ方
brew install senkentarou/tap/bh で入ります。GitHub Releases の tarball を直接展開しても構いません。
対象のシェル
読むのは ~/.bash_history だけです。zsh や fish の履歴には対応していません。
履歴への書き込み
書き込むのは削除のときだけです。削除は必ず y/N の確認をはさみ、~/.bash_history から該当する行を消します。
ネットワーク通信
通信するコードを持ちません。読み取った履歴が手元のマシンから出ることはありません。
価格
無料です。

試してみる

brew install senkentarou/tap/bh で入ります。GitHub Releases から tarball を直接落とすこともできます。

Apple Silicon の Mac 向け ・ bash の履歴が対象 ・ 無料(MIT)