「fzf」の版間の差分

提供: FreeBSD入門
移動: 案内検索
(ページの作成:「fzf とは、Go で開発されたコマンドラインの Fuzzy Finder です。peco のようなコマンドです。 '''読み方''' ;fzf:えふ ぜ...」)
 
 
(同じ利用者による、間の4版が非表示)
行1: 行1:
[[fzf]] とは、[[Go]] で開発されたコマンドラインの Fuzzy Finder です。[[peco]] のようなコマンドです。
+
[[fzf]] とは、[[Go]] で開発されたコマンドラインの Fuzzy Finder です。[[peco]] のようなコマンドです。[[zsh]] や [[vim]] と連携できる素晴らしいヤツです。
  
 
'''読み方'''
 
'''読み方'''
行18: 行18:
 
途中で gem install が入ったせいか、 sudo が必要になりましたが、 sudo を入れると root の設定を変更しにいってしまうので、 fzf/install を2回叩くと簡単かもしれません。
 
途中で gem install が入ったせいか、 sudo が必要になりましたが、 sudo を入れると root の設定を変更しにいってしまうので、 fzf/install を2回叩くと簡単かもしれません。
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 +
$ sudo pkg install rubygem-curses
 
$ git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
 
$ git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
 
$ sudo ~/.fzf/install
 
$ sudo ~/.fzf/install
行123: 行124:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
上記は、アスタリスク アスタリスク タブです。
 
上記は、アスタリスク アスタリスク タブです。
 +
 +
[[pkg]] コマンドで検索した結果を [[fzf]] でフィルターできます。
 +
<syntaxhighlight lang="bash">
 +
$ pkg search . | fzf
 +
</syntaxhighlight>
 +
 +
ssh のホスト名を補完できます。
 +
<syntaxhighlight lang="bash">
 +
$ ssh **
 +
</syntaxhighlight>
 +
 +
kill も補完できるようですが、FreeBSDだと補完結果からプロセス番号がちゃんと入力できませんでした。
 +
 
== 使用例 コマンドライン ==
 
== 使用例 コマンドライン ==
 
<nowiki>**</nowiki>のあとにタブを入力することで [[fzf]] が呼び出されます。
 
<nowiki>**</nowiki>のあとにタブを入力することで [[fzf]] が呼び出されます。
行171: 行185:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
pkcrack に近い ncrack もマッチしてますね。
 
pkcrack に近い ncrack もマッチしてますね。
 +
== vim+fzf ==
 +
.vimrc に下記の設定を追加します。
 +
<syntaxhighlight lang="vim">
 +
set rtp+=~/.fzf
 +
</syntaxhighlight>
 +
 +
vim では、以下のコマンドで呼び出せます。
 +
<syntaxhighlight lang="vim">
 +
:FZF
 +
</syntaxhighlight>
 +
== トラブル ==
 +
=== curses gem is not installed. Try `gem install curses`. ===
 +
パッケージのアップデートで ruby のバージョンが上がったら
 +
curses gem is not installed. Try `gem install curses`.
 +
のエラーが出るようになりました。
 +
gem で curses のパッケージをインストールしてあげましょう。
 
== まとめ ==
 
== まとめ ==
 
* [[fzf]] コマンドは、Fuzzy Finder です。
 
* [[fzf]] コマンドは、Fuzzy Finder です。

2016年9月22日 (木) 20:49時点における最新版

fzf とは、Go で開発されたコマンドラインの Fuzzy Finder です。peco のようなコマンドです。zshvim と連携できる素晴らしいヤツです。

読み方

fzf
えふ ぜっと えふ
Fuzzy Finder
ふぁじー ふぁいんだー

概要

Fuzzy Finder とは、あいまいな検索を意味します。 Fuzzy は、英語の形容詞の単語で、「あいまいな」といった意味があります。

fzf は、多目的のコマンドライン Fuzzy Finder です。fzf は、zshvim などから利用し、検索を効率化します。 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 は、パッケージ化されてない。

関連項目