fzfのインストール方法と初期設定
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_OPTS
はctrl + T
でのカレントディレクトリ配下のファイル検索時のオプション-
bat
についてはbatのインストール方法を参考にインストール - 上記オプションを付けることで選択している検索結果がファイルの場合は中身を表示出来る
- ファイルを選択した状態でEnter押下でコマンドラインにファイル名が出力される
- 適当なエディタ、例えば、
vim
と入力した後にctrl + T
でファイルを選択してEnterでvimで選択したファイルを簡単に開くことができる。
-
-
FZF_ALT_C_OPTS
はalt + c
カレントディレクトリ配下のディレクトリ移動を可能にするオプション-
exa
についてはexaのインストール方法を参照 - 選択した状態でEnterを押下すると移動できる。
- 上記オプションを付けることで選択している検索結果のディレクトリ配下をtree表示できる。
-
追加設定
デフォルトではfzf
はfind
コマンドを使って動作するが、オプションで使用するコマンドを変更することができるので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
配下に格納
事前に$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
- junegunn/fzf
- fzf(fuzzy finder)の便利な使い方をREADME, Wikiを読んで学ぶ
- fzfのpreview関連のオプション調べてみた
- aptで入れたfzfで履歴の曖昧検索とかを有効にしたい (zenn.dev)
- fzfを導入してterminalでの作業効率を爆上げする
- fzfの使い方をマスターして作業効率をアップさせよう!
- カレントディレクトリ配下をfzf+grep(rg)でインクリメンタルに全文検索したあとにvimで開く
fd
- Linuxメモ : Rust製のfdコマンド(findコマンド代替)の使い方 - もた日記 (hatenablog.com)
- 高速で記述が簡単な find コマンドの代替「fd」 (zenn.dev)
Discussion