Zshでコマンド履歴を快適に検索する方法(fzf導入ガイド)
問題点
ターミナルでCtrl+Rを使ってコマンド履歴を検索するとき、一つずつしか表示されず不便に感じたことはありませんか?特に似たようなコマンドを何度も実行している場合、目的のコマンドを見つけるのに時間がかかってしまいます。
解決策:fzfの導入
fzf(fuzzy finder)を使えば、コマンド履歴を一覧表示し、リアルタイムで絞り込み検索ができるようになります。
fzfのインストール
Homebrewを使う場合(macOS)
brew install fzf
aptを使う場合(Ubuntu/Debian)
sudo apt install fzf
Zshへの設定
.zshrcファイルを編集します。
vim ~/.zshrc
ファイルの末尾に以下を追加:
# fzfの設定 eval "$(fzf --zsh)" export FZF_DEFAULT_OPTS='--height 40% --reverse --border'
設定を保存したら、反映させます:
source ~/.zshrc
使い方
設定後は、これまでと同じようにCtrl+Rを押すだけです。
すると、過去のコマンド履歴が一覧表示され: - 文字を入力するとリアルタイムで絞り込み - ↑↓キーで選択 - Enterキーで実行
非常に直感的で快適な操作が可能になります。
オプション設定のカスタマイズ
より見やすくしたい場合は、オプションを調整できます:
# プレビューウィンドウ付き export FZF_DEFAULT_OPTS='--height 50% --reverse --border --preview-window=:hidden' # 色をカスタマイズ export FZF_DEFAULT_OPTS='--color=fg:#f8f8f2,bg:#282a36,hl:#bd93f9'
トラブルシューティング
Ctrl+Rが動作しない場合
キーバインドが設定されているか確認:
bindkey | grep fzf
"^R" fzf-history-widgetのような行が表示されればOKです。
表示されない場合は、.zshrcの設定を見直し、以下の形式になっているか確認してください:
eval "$(fzf --zsh)"
注意: source ~/.fzf.zshやsource <(fzf --zsh)ではなく、eval "$(fzf --zsh)"の形式を使用してください。
セキュリティに関する補足
fzfは広く使われているOSSで、GitHub上で6万以上のスターを獲得している信頼性の高いツールです。
ただし、履歴に機密情報を残さないよう、以下の設定も併せて行うことをおすすめします:
# パスワードやトークンを履歴に残さない export HISTCONTROL=ignorespace export HISTIGNORE="*password*:*token*:*secret*" # 履歴ファイルのパーミッション設定 chmod 600 ~/.zsh_history
機密情報を扱うコマンドを実行する際は、コマンドの先頭にスペースを入れると履歴に残りません。
まとめ
fzfを導入することで、コマンド履歴の検索が劇的に快適になります。設定も簡単で、一度使うと手放せなくなるツールです。ぜひ試してみてください。
参考リンク - fzf GitHub リポジトリ - fzf 公式ドキュメント