fzf
fzf とは、Go で開発されたコマンドラインの Fuzzy Finder です。peco のようなコマンドです。zsh や vim と連携できる素晴らしいヤツです。
読み方
- fzf
- えふ ぜっと えふ
- Fuzzy Finder
- ふぁじー ふぁいんだー
目次
概要
Fuzzy Finder とは、あいまいな検索を意味します。 Fuzzy は、英語の形容詞の単語で、「あいまいな」といった意味があります。
fzf は、多目的のコマンドライン Fuzzy Finder です。fzf は、zsh や vim などから利用し、検索を効率化します。 Anything ライクなフィルタです。同系統のツールとして peco があります。zsh では、peco を組み合わせて使うこともできました。
peco は、fzf と同様に、人気のコマンドです。peco に比べて、表示がカッコイイ、画面を全部 peco で上書きされない(以前の画面がまるっと消えない)ところも良い所だと思います。
インストール
残念ながら FreeBSD の パッケージとして提供されていないため、 pkg コマンドではインストールができません。
途中で gem install が入ったせいか、 sudo が必要になりましたが、 sudo を入れると root の設定を変更しにいってしまうので、 fzf/install を2回叩くと簡単かもしれません。
$ sudo pkg install rubygem-curses $ git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf $ sudo ~/.fzf/install $ ~/.fzf/install
以下は実行例です。
$ git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf Cloning into '/home/kaworu/.fzf'... remote: Counting objects: 74, done. remote: Compressing objects: 100% (67/67), done. remote: Total 74 (delta 1), reused 23 (delta 0), pack-reused 0 Unpacking objects: 100% (74/74), done. Checking connectivity... done. $ sudo ~/.fzf/install パスワード: No prebuilt binary for FreeBSD amd64 ... Installing legacy Ruby version ... Checking Ruby executable ... OK (/usr/local/bin/ruby) Checking Curses support ... Not found Installing 'curses' gem ... Fetching: curses-1.0.1.gem (100%) Building native extensions. This could take a while... Successfully installed curses-1.0.1 Installing ri documentation for curses-1.0.1 1 gem installed Checking Ruby version ... >= 1.9 Creating wrapper script for fzf ... OK Do you want to enable fuzzy auto-completion? ([y]/n) y Do you want to enable key bindings? ([y]/n) y Generate ~/.fzf.bash ... OK Generate ~/.fzf.zsh ... OK Update /root/.bashrc: - [ -f ~/.fzf.bash ] && source ~/.fzf.bash + Added Update /root/.zshrc: - [ -f ~/.fzf.zsh ] && source ~/.fzf.zsh + Added Finished. Restart your shell or reload config file. source ~/.bashrc # bash source ~/.zshrc # zsh Use uninstall script to remove fzf. For more information, see: https://github.com/junegunn/fzf
設定
zsh なら .zshrc に下記の設定が自動的に追加されます。
[ -f ~/.fzf.zsh ] && source ~/.fzf.zsh
コマンドラインオプション
usage: fzf [options] Search -x, --extended Extended-search mode -e, --extended-exact Extended-search mode (exact match) -i Case-insensitive match (default: smart-case match) +i Case-sensitive match -n, --nth=N[,..] Comma-separated list of field index expressions for limiting search scope. Each can be a non-zero integer or a range expression ([BEGIN]..[END]). --with-nth=N[,..] Transform the item using index expressions for search -d, --delimiter=STR Field delimiter regex for --nth (default: AWK-style) Search result -s, --sort=MAX Maximum number of matched items to sort (default: 1000) +s, --no-sort Do not sort the result. Keep the sequence unchanged. Interface -m, --multi Enable multi-select with tab/shift-tab --no-mouse Disable mouse +c, --no-color Disable colors +2, --no-256 Disable 256-color --black Use black background --reverse Reverse orientation --prompt=STR Input prompt (default: '> ') Scripting -q, --query=STR Start the finder with the given query -1, --select-1 Automatically select the only match -0, --exit-0 Exit immediately when there's no match -f, --filter=STR Filter mode. Do not start interactive finder. --print-query Print query as the first line Environment variables FZF_DEFAULT_COMMAND Default command to use when input is tty FZF_DEFAULT_OPTS Default options (e.g. "-x -m --sort 10000")
使い方
コマンド履歴の検索の例です。
$ C-r
コマンドラインで fzf を起動する例です。
$ ls **<TAB>
上記は、アスタリスク アスタリスク タブです。
pkg コマンドで検索した結果を fzf でフィルターできます。
$ pkg search . | fzf
ssh のホスト名を補完できます。
$ ssh **
kill も補完できるようですが、FreeBSDだと補完結果からプロセス番号がちゃんと入力できませんでした。
使用例 コマンドライン
**のあとにタブを入力することで fzf が呼び出されます。
$ ls /etc/ss** [1][2588][a1 ~]19:05:35 ──────────────────────────────────────── /etc/rc.d/gssd /etc/gss/mech /etc/gss/qop /etc/passwd /etc/ssl/ /etc/ssh/ > /etc/gss/ 100/398 > ss
使用例 コマンド履歴の検索
key-bindings.zsh で C-r が上書きされているので、 C-r で fzf を利用したコマンド履歴のサーチが利用できます。
C-r で コマンド履歴を検索します。
薫 $ [146][2587][a1 ~]18:59:35 ──────────────────────────────────────── 2578 man fzf 2581 faf 2582 rehash 2583 source ~/.zshrc 2584 fzf --v 2585 ~/.fzf/install > 2586 fg 2561/2561 >
検索キーワードとして pkcrack を入力すると下記のように絞りこまれました。
薫 $ [146][2587][a1 ~]18:59:35 ──────────────────────────────────────── 1793 pkcrack -C unzip -c backnumber08.txt -p backnumber08.txt -d decrypte.. 1794 pkcrack unzipzip -c backnumber09.txt -p backnumber09.txt -d decrypte.. 1912 pkcrack -C unzip -c backnumber09.txt -p backnumber09.txt -Pbacknumbe.. 1913 pkcrack -C unzip -c backnumber09.txt -p backnumber09.txt -P backnumb.. 2105 pkg sekrch -f arm-gnueabi-gcc 2107 pkg sekrch -f arm-none-eabi-gcc > 2441 pkg info -l ncrack 14/2561 > pkcrack
pkcrack に近い ncrack もマッチしてますね。
vim+fzf
.vimrc に下記の設定を追加します。
set rtp+=~/.fzf
vim では、以下のコマンドで呼び出せます。
:FZF
トラブル
curses gem is not installed. Try `gem install curses`.
パッケージのアップデートで ruby のバージョンが上がったら
curses gem is not installed. Try `gem install curses`.
のエラーが出るようになりました。 gem で curses のパッケージをインストールしてあげましょう。
まとめ
- fzf コマンドは、Fuzzy Finder です。
- peco よりも UI 的には、 fzf の方がカッコイイ。
- peco と違い fzfは、画面が全部消えない。
- fzf は、パッケージ化されてない。
関連項目
ツイート