fzf入門:zshのhistory検索・ファイル検索を強化する設定

スポンサーリンク

fzf入門:zshのhistory検索・ファイル検索を強化する設定

fzfとは

fzf(fuzzy finder)はコマンドラインのインタラクティブなファジー検索ツールです。インストールするだけで Ctrl+R のhistory検索がインクリメンタルになり、ファイル選択やディレクトリ移動も格段に速くなります。

fzf の Ctrl+R で history をリアルタイム絞り込むデモ


インストール

macOS(Homebrew)

brew install fzf

Linux(apt)

sudo apt install fzf

mise

mise use --global fzf

zshへの組み込み

インストール後、.zshrc に以下を追加します。

# ~/.zshrc
eval "$(fzf --zsh)"

source ~/.zshrc で反映します。

source ~/.zshrc

これだけで Ctrl+RCtrl+TAlt+C の3つのキーバインドが有効になります。


主要な機能

Ctrl+R:historyをインクリメンタル検索

ターミナルで Ctrl+R を押すと過去のコマンド履歴をリアルタイムで絞り込めます。

> git commit
  git commit -m "fix bug"
  git commit --amend
  git commit -m "update README"

文字を打つたびに候補が絞り込まれ、Enter で実行、Ctrl+C でキャンセルします。

デフォルトの Ctrl+R(履歴を1件ずつ遡るだけ)と比べて圧倒的に使いやすくなります。

Ctrl+T:ファイルをfuzzy検索して挿入

Ctrl+T で現在のディレクトリ以下のファイルを検索してコマンドラインに挿入できます。

vim <Ctrl+T>   # ファイルを検索してvimで開く
cp <Ctrl+T>    # コピー元ファイルをfuzzy選択

Alt+C:ディレクトリをfuzzy選択してcd

Alt+C(macOSでは Esc+C)でディレクトリを検索してそのまま移動できます。

> src/components
  src/components/
  src/components/ui/
  src/hooks/

カスタマイズ

.zshrcFZF_DEFAULT_OPTS を設定するとUIと動作を変更できます。

# ~/.zshrc
export FZF_DEFAULT_OPTS='
  --height 40%
  --layout=reverse
  --border
  --preview "cat {}"
'
オプション 説明
--height 40% ウィンドウの高さ(全画面ではなく部分表示)
--layout=reverse 入力欄を上、候補を下に表示
--border 枠線を表示
--preview "cat {}" 選択中のファイルをプレビュー

プレビューをシンタックスハイライトする

bat をインストールするとプレビューがカラー表示になります。

brew install bat
export FZF_DEFAULT_OPTS='
  --height 40%
  --layout=reverse
  --border
  --preview "bat --color=always --style=numbers {}"
'

fd と組み合わせる

デフォルトでは find を使いますが、fd を使うと高速になり .gitignore を自動で除外します。

brew install fd
# ~/.zshrc
export FZF_DEFAULT_COMMAND='fd --type f --hidden --follow --exclude .git'
export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"

まとめ

キーバインド 動作
Ctrl+R historyをfuzzy検索
Ctrl+T ファイルをfuzzy検索してコマンドラインに挿入
Alt+C ディレクトリをfuzzy選択してcd
# ~/.zshrc に追加する最小構成
eval "$(fzf --zsh)"
  • eval "$(fzf --zsh)".zshrc に追加するだけで3つのキーバインドが有効になる
  • FZF_DEFAULT_OPTS でプレビューや表示位置をカスタマイズできる
  • fd と組み合わせると検索が高速になり .gitignore を自動除外できる

!!!$ を使った履歴展開と組み合わせるとさらに効率が上がります。「シェルの履歴展開入門:!! や !$ で直前のコマンドを使い回す」も参照してください。