bashやzsh、fishのようなモダンなインタラクティブシェルには、過去に入力した内容を検索・再利用することができる「履歴機能」が搭載されています。
シェルに組み込まれた履歴機能を活用することでコマンド入力の効率を高めることができますが、さらに上を目指すならば「Atuin」を検討してみると良いかもしれません。
Atuinは、既存のシェル履歴をSQLiteデータベースで置き換え、実行したコマンドや追加情報を保存することができるオープンソースツールです。エンドツーエンドの暗号化に対応した同期機能を利用して、複数のマシンで同じ履歴を利用することもできます。同期サーバーは無料で利用でき、自分でサーバーを立てることもできます。
Atuinは以下のシェルに対応しています。
- zsh
- bash
- fish
- nushell
- xonsh
以下使用方法を説明します。
Atuinのセットアップ
AtuinはRustで作られたオープンソースツールです。Rustのパッケージ管理ツールcargoを使ってインストールすることもできますが、macOSの場合は、HomebrewやMacPortsを使った方が簡単だと思います。
Homebrewの場合:
brew install atuin
MacPortsの場合:
sudo port install atuin
atuinコマンドが利用できるようになったら、以下を実行します。atuin register
は公式の同期サーバーを利用しない場合は不要です。
atuin register -u-e atuin import auto atuin sync
atuinは単体のコマンドとしても利用することができますが、シェルに組み合わせて使用するのが便利です。これにはシェルプラグインを利用します。
zshの場合:
echo 'eval "$(atuin init zsh)"' >> ~/.zshrc
bashの場合:
echo 'eval "$(atuin init bash)"' >> ~/.bashrc
Atuinの使用方法
シェルプラグインの設定が完了すると↑(上矢印)
や、Ctrl + r
でAtuinの履歴検索機能を呼び出すことができるようになります。
履歴表示方法はいくつか選べますが
デフォルト設定の場合、枠の中に履歴一覧が表示されます。
▲文字を入力してコマンドをファジー検索して絞り込むことができます。
▲赤く表示されているのが現在選択されているコマンドです。Enterキーを押すとそのコマンドが直接実行され、Tabキーを押すとその内容がターミナルに貼り付けられます。
利用できるショートカットキーは以下の通りです。
Shortcut | Action |
---|---|
enter | 選択したアイテムを実行 |
tab | アイテムを選択し編集 |
ctrl + r | フィルターモードのサイクル |
ctrl + s | 検索モードのサイクル |
alt + 1 to alt + 9 | アイテムを番号で選択 |
ctrl + c / ctrl + d / ctrl + g / esc | 元に戻る |
ctrl + y | 選択したアイテムをクリップボードに戻る |
ctrl + ⬅︎ / alt + b | カーソルを前のワードに移動 |
ctrl + ➡️ / alt + f | カーソルを次のワードに移動 |
ctrl + b / ⬅︎ | カーソルを左に移動 |
ctrl + f / ➡️ | カーソルを右に移動 |
ctrl + a / home | カーソルを行頭に移動 |
ctrl + e / end | カーソルを行末に移動 |
ctrl + backspace / ctrl + alt + backspace | 前のワードを削除 / カーソルの直前のワードを削除 |
ctrl + delete / ctrl + alt + delete | 次のワードを削除 / カーソルの直後のワードを削除 |
ctrl + w | カーソルの前のワードが単語境界をまたいでいても削除 |
ctrl + u | カーソルライン来をクリアー |
ctrl + n / ctrl + j / ⬆ | 次のアイテムを選択 |
ctrl + p / ctrl + k / ⬇ | 前のアイテムを選択 |
page down | 検索結果を1ページ下にスクロール |
page up | 検索結果を1ページ上にスクロール |
⬇ (with no entry selected) | オリジナルを返すか、クエリーを返すか。 |
⬇ | リストの次のアイテムを選択 |
キーバインドは他にもVimモードが存在し、設定で有効にすることができます。
設定ファイルは~/.cofnig/atuin/config.toml
で、例えばstyle="compact"
にすると、次のように表示されます。
▲compactモードでは枠線が表示されません。iTerm2の場合「Ambiguous characters are double-width」にチェックしていると枠線がずれて正しく表示されないため、この表示方法を選択した方がよいかもしれません。
まとめ
Atuinはシェルの履歴機能を強化するユーティリティです。以前のブログ記事「長いシェル履歴保持のススメ」でもAtuinの名前を紹介しました。実際に使ってみたい方の参考になれば幸いです。