💬

fzfのインストール方法と初期設定

2023/08/08に公開

CLIでインクリメンタルサーチが可能になるツール。
pecoと類似しているが、fzfはデフォルトでコマンド履歴の検索やディレクトリ移動のキーバインディングなどが予め設定されており、カスタマイズしなくても便利な機能が揃っている。


インストール方法

以下のコマンドでインストール

git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install

上記を実行後、以下が表示されるが基本的にyでOK。

Do you want to enable fuzzy auto-completion? ([y]/n) y
Do you want to enable key bindings? ([y]/n) y
Generate /home/frey/.fzf.bash ... OKDo you want to update your shell configuration files? ([y]/n) y
Update /home/masaya/.bashrc:
  - [ -f ~/.fzf.bash ] && source ~/.fzf.bash
    + Added

Finished. Restart your shell or reload config file.
   source ~/.bashrc  # bash

Use uninstall script to remove fzf.

For more information, see: https://github.com/junegunn/fzf

Dockerfileなどに記述する際は対話形式でのインストールは避けたいので、
こちらに記載の--allオプションを使ってインストールすればよい。

~/.fzf/install --all

あるいはaptコマンドでもインストール可能

sudo apt install fzf

aptでインストールすると.fzf/installに相当するコマンドがないため、
ctrl + rでfzf起動などの初期設定ができない。
/usr/share/doc/fzf/examples/key-bindings.bashに設定ファイルが格納されているので、
これを~/.bashrcに書き込むことでショートカット起動の割り当てを有効化できる。

echo 'source /usr/share/doc/fzf/examples/key-bindings.bash' >> ~/.bashrc

dockerなどの環境構築で他のユーザーが別のユーザーに対してfzfの設定をしたい場合はこの方法を使う価値はありそう。

docker環境でaptでインストールすると何故か、/usr/share/doc/fzf/examples/key-bindings.bashがないケースが存在した。
そのような場合はgithubから直接DLして予め格納しておく。

sudo wget -q -O /usr/share/doc/fzf/examples/key-bindings.bash https://raw.githubusercontent.com/junegunn/fzf/master/shell/key-bindings.bash

バージョン指定したい場合は以下

FZF_VER=$(fzf --version | awk '{print $1}').0
wget -q -O /usr/share/doc/fzf/examples/key-bindings.bash https://raw.githubusercontent.com/junegunn/fzf/${FZF_VER}/shell/key-bindings.bash

設定の変更

export FZF_DEFAULT_OPTS="--ansi -e --prompt='QUERY> ' --layout=reverse --border=rounded --height 100%"
export FZF_CTRL_T_OPTS="--preview 'bat --color=always --style=header,grid --line-range :100 {}'"
export FZF_ALT_C_OPTS="--preview 'exa {} -h -T -F  --no-user --no-time --no-filesize --no-permissions --long | head -200'"
  • FZF_DEFAULT_OPTSはfzfをデフォルトで起動した時のオプション
  • FZF_CTRL_T_OPTSctrl + Tでのカレントディレクトリ配下のファイル検索時のオプション
    • bat についてはbatのインストール方法を参考にインストール
    • 上記オプションを付けることで選択している検索結果がファイルの場合は中身を表示出来る
    • ファイルを選択した状態でEnter押下でコマンドラインにファイル名が出力される
    • 適当なエディタ、例えば、vim と入力した後にctrl + Tでファイルを選択してEnterでvimで選択したファイルを簡単に開くことができる。
  • FZF_ALT_C_OPTSalt + cカレントディレクトリ配下のディレクトリ移動を可能にするオプション
    • exaについてはexaのインストール方法を参照
    • 選択した状態でEnterを押下すると移動できる。
    • 上記オプションを付けることで選択している検索結果のディレクトリ配下をtree表示できる。

追加設定

デフォルトではfzffindコマンドを使って動作するが、オプションで使用するコマンドを変更することができるのでfindより高速での検索が可能なfdコマンドに置き換える。
以下のコマンドでfdのインストール

sudo apt install -y fd-find
mkdir -p ~/.local/bin
ln -s $(which fdfind) ~/.local/bin/fd

既存の設定に追加してFZF_*_COMMANDを追記

export FZF_DEFAULT_COMMAND="fd -H -E .git --color=always"
export FZF_CTRL_T_COMMAND="fd --type f -H -E .git"
export FZF_ALT_C_COMMAND="fd --type d -H -E .git"

FZF_*_COMMANDの設定を行うことで各キーバインドでのfzf実行時に使用するコマンドを設定することができる。今回は隠しファイル・フォルダも含めて表示するように変更した。


Tips

  • カレントディレクトリのファイルの中身を確認したい場合は、rangerを使うよりctrl + Tでファイルプレビューしたほうが早そう。
    rangerについてはrangerのインストール方法と初期設定を参照

現在のディレクトリ配下を全文検索

以下を参考に実装、スクリプト名はtfzとして~/bin配下に格納
https://qiita.com/masakuni-ito/items/deb000b5ca5eb6588463

事前に$EDITORの環境変数を設定しておくこと。
vimを設定する場合は以下のコマンドで~/.bashrcに追記できる。

echo "export EDITOR=vim" >> ~/.bashrc

ctrl + fで検索できるように~/.bashrcに記載しておくとよい

echo bind '"\C-f":"tfz\C-m"' >> ~/.bashrc

また、依存パッケージとしてripgrepが必要なので注意。
以下のコマンドでripgrepのインストール

sudo apt install -y ripgrep

Reference

fd

ripgrep

Discussion