ZshやBash、Fishなどのモダンなインタラクティブシェルは、入力したコマンドの履歴を保存するヒストリー機能を搭載しています。
ヒストリー機能によって、過去に入力したコマンドを効率良く再入力することが可能となり、生産性を向上させることができるのです。このヒストリー機能の重要性や活用方法を紹介する記事「Which command did you run 1731 days ago?」が公開されています。
記事を書いたソフトウェアエンジニアのThorsten Ball氏は、Zshの履歴ファイル~/.zsh_history
に26278個のコマンドを保存しています。最も古いエントリーは2019年4月25日に記録されたもので、Ctrl-rを押すと、fzfがポップアップし、過去5年間のシェル履歴に含まれる26278個のコマンドを一瞬でファジー検索することができるそうです。
この設定により、複雑なcurlコマンドやrsyncコマンド、gitとgrepとfindを組み合わせたコマンドなど、一から入力するのが困難なコマンドをすぐに思い出すことが可能となっています。
以下同氏が長年使ってきたZshの設定です。
########## # HISTORY ########## HISTFILE=$HOME/.zsh_history HISTSIZE=50000 SAVEHIST=50000 # Immediately append to history file: setopt INC_APPEND_HISTORY # Record timestamp in history: setopt EXTENDED_HISTORY # Expire duplicate entries first when trimming history: setopt HIST_EXPIRE_DUPS_FIRST # Dont record an entry that was just recorded again: setopt HIST_IGNORE_DUPS # Delete old recorded entry if new entry is a duplicate: setopt HIST_IGNORE_ALL_DUPS # Do not display a line previously found: setopt HIST_FIND_NO_DUPS # Dont record an entry starting with a space: setopt HIST_IGNORE_SPACE # Dont write duplicate entries in the history file: setopt HIST_SAVE_NO_DUPS # Share history between all sessions: setopt SHARE_HISTORY # Execute commands using history (e.g.: using !$) immediatel: unsetopt HIST_VERIFY
この設定をfzfと組み合わせてファジー検索を実行しています。
同氏はまた、シェルの履歴機能を強化する「Atuin」を使用することもできるとしています。Atuinはシェル履歴を保存したり検索したりすることができるだけでなく、複数のマシンでシェル履歴を同期したり、バックアップすることもできるおすすめのツールだそうです。
Hacker Newsでもシェル履歴に関する議論が行われており、Atuinのほかにも、zsh-histdbなど有用なツールの提案が行われています。シェル履歴を極めたい方は確認してみてはいかがでしょうか。