atuinはRust製のコマンド履歴管理ツール。コマンド履歴をローカルのSQLiteデータベースに保存し、履歴のFuzzy検索や端末間での同期などの機能を提供する。
普段からzsh組み込みの履歴検索(Control + R
)を使っているが、思い通りにコマンド検索ができないことがあり、atuinを試してみることにした。
インストール
まずはatuinのバイナリをインストールする。以下で簡単にインストールできる:
curl --proto '=https' --tlsv1.2 -LsSf https://setup.atuin.sh | sh
~/.atuin/bin
にバイナリがインストールされる。HomebrewやCargo経由でもインストールできるので、詳細は公式ドキュメントを参照。
次に、atuinを利用するシェルごとに初期化設定を行う必要がある。
デフォルトのキーバインドでは、上矢印キーで履歴検索画面が表示されるが、無効化したい場合は--disable-up-arrow
指定する。自分の場合は少々ビジーに感じるので、無効している。
zshの場合:
echo 'eval "$(atuin init zsh --disable-up-arrow)"' >> ~/.zshrc
nushellの場合:
mkdir ~/.local/share/atuin/
atuin init nu --disable-up-arrow | save ~/.local/share/atuin/init.nu
コマンド履歴のインポート
インストール後の状態では、当然だがコマンド履歴は何も保存されていない。既存のhistoryをatuinにインポートするコマンドatuin import
が用意されているので、これを使って履歴をインポートする。
zshの場合:
atuin import auto
nushellの場合:
atuin import nushell
コマンド履歴の検索
Control + R
もしくはatuin search -i
で履歴検索のTUIを開くことができる。
検索ワードを入力すると、Fuzzy検索が行われ、履歴が絞り込まれる。
詳細な検索シンタックスは公式ドキュメントに記載されているが、fzfのシンタックスをベースとし、完全一致や前方一致、後方一致など、様々な検索方法が利用できる。
以下は、執筆時点での検索シンタックスの一覧を和訳した表:
トークン例 マッチタイプ 説明 sbtrkt
あいまい一致 sbtrkt
にマッチするアイテム'wild
完全一致 wild
を含むアイテム^music
前方完全一致 music
で始まるアイテム.mp3$
後方完全一致 .mp3
で終わるアイテム!fire
逆完全一致 fire
を含まないアイテム!^music
逆前方完全一致 music
で始まらないアイテム!.mp3$
逆後方完全一致 .mp3
で終わらないアイテム
|
は、OR演算子として使える。例えば、次のクエリは「core」で始まり、「go」、「rb」、または「py」のいずれかで終わるエントリにマッチする:
^core go$ | rb$ | py$
Enterキーでの実行の無効化
デフォルトでは、検索画面でEnterキーを押下すると、選択中のコマンドがすぐに実行される。
少々危険なので、これは無効化している。atuinのconfigファイル(~/.config/atuin/config.toml
)を編集する:
# ~/.config/atuin/config.toml
enter_accept = false
端末間の同期
atuinは、端末間の同期機能も特徴の一つだ。atuinの製作者がホストするサーバーか、セルフホストのサーバーを利用して、端末間で履歴を同期することができる。
同期機能はまだ試せていない。仕事で利用する場合は少々ハードルが高いが、個人利用であれば試してみてもいいかもしれない。通信はエンドツーエンドで暗号化されているとのこと。
代替的な端末間の移行方法として、ファイルをコピーする方法もある。atuin info
コマンドで、atuinの設定ファイルやデータベースのパスを確認できるので、ファイル群を端末間でコピーすればOK。ただし、公式のドキュメントにはこの方法について記載がなく、サポートされているわけではないようなので自己責任で行なってほしい。