Linuxシステムを使っている方、特にコマンドラインを日常的に活用している方にとって、効率よく情報を検索し操作することは重要な課題です。そんなときに役立つのが「fzf(ファジーファインダー, fuzzy finder)」というツールです。ここでは、fzfの便利な点をわかりやすく説明し、どのように日々の作業を効率化できるかをご紹介します。
fzfとは
fzfは、ターミナル上で使える「ファジーマッチング(あいまい検索)ツール」です。ファジーマッチングとは、入力された文字列に対して部分的に一致するデータを柔軟に検索する方法です。例えば、文字列「abc」で検索すると、「axbycz」や「a-b-c」などの項目もヒットします。Linuxでは、ファイルリストやコマンド履歴、プロセスリストなど膨大なデータを扱う機会が多いですが、fzfを使うことでこれらのデータをリアルタイムで絞り込み、必要な情報に素早くアクセスできるようになります。例えば、
1 |
ls | fzf |
のようなコマンドで以下の画像のようなターミナルの画面に切り替えることができます。
fzfは非常にシンプルなインターフェースを持ち、インタラクティブにリストを絞り込むことができます。キーボード操作だけで検索、選択、決定が完結するため、初心者でも直感的に使い始めることができます。
大量のファイルやデータを扱う場合でも、fzfは驚くほど高速に動作し、サーバー管理などリソース制限のある場面でも快適に使用できます。
また、fzfは多くのオプションを持ち、プレビュー機能や複数選択モードなどを利用して、用途に応じた柔軟な使い方が可能です。独自のスクリプトに組み込むことで、作業効率を大幅に向上できます。
インストール
Linuxではパッケージマネージャーを使って簡単にインストールできます。Ubuntuの場合はaptコマンドでインストールできます。
1 |
sudo apt install fzf |
また、より新しいバージョンを使いたい場合はGitHubからダウンロードし、インストールすることもできます
ファイルやディレクトリの検索
例えば、現在のディレクトリ内にあるファイルを選択したい場合は、lsコマンドをfzfに通します。
1 |
ls | fzf |
そうすると、ディレクトリ内のすべてのファイルがリストとして表示されます。リストはリアルタイムで絞り込みができ、必要なファイルを素早く選べます。
選択をすると結果として、その選択したファイルの名前が返されます。
1 2 |
$ ls | fzf Desktop |
選択せずに終了したい場合のキーバインドはいくつかあり、ctrl+c、ctrl+g、ctrl+q、escになります。
lsコマンドを使わずにfzfコマンドをそのまま使うとカレントディレクトリから下にあるファイルをすべて表示してくれます。例えば、
1 2 3 4 5 6 7 8 9 10 |
$ tree . ├── a-b-c ├── axbycz ├── dir1 │ └── dir1file.txt └── dir2 └── dir2file.txt 3 directories, 4 files |
では、4つのファイルが選択肢として表示されます。
コマンド履歴の検索
過去に実行したコマンド履歴から必要なものを再利用したい場合、historyコマンドが利用できます。
1 |
history | fzf |
選択の結果は以下のような文字列になります。
1 2 |
$ history | fzf 2 ls |
このとても単純なコマンドを再利用したい場合は、--bindオプションで"enter:become({2})"のようにすると選択したコマンドが再実行されます。{2}はlsコマンドを実行するようにするためにコマンド行のフィールドの2番目を指定しています。
1 2 |
$ history | fzf --bind "enter:become({2})" a-b-c axbycz dir1 dir2 |
historyコマンドで一番最新のコマンドを表示したい場合はsortコマンドで逆順にするかfzfの--tacオプションを使うとよいでしょう。
1 2 |
$ history | fzf --tac 813 ls | sed 's/a/d/' |
そして、パイプを含んだ少し複雑なコマンドは、操作として少し注意する必要があると思いますがevalコマンドに渡すとコマンドが再利用できるかもしれません。
1 2 3 4 5 |
$ history | fzf --tac --bind "enter:become(eval {2..})" d-b-c dxbycz dir1 dir2 |
複数ファイルの選択
fzfは複数選択モードにも対応しています。--multiオプションを使います。複数選択はマウス操作なら右クリックで、キーボード操作ならTabまたはShift+Tabで行うことができ、Shiftがあるかないかの違いは選択後のカーソルの移動方向になります。
選択後の結果は以下のようにリストされます。
1 2 3 4 |
$ ls | fzf --multi Downloads Documents Desktop |
ファイルを確認しながら選択
fzfは--previewオプションを用いるとプレビューを見ながら選択を行えます。--previewオプションはコマンドを引数に取る必要があります。単純にcatコマンドを引数に取るとプレビューにファイルの内容を表示しながら選択を行うことができます。
1 |
fzf --preview "cat {}" |
表示の仕方は以下のようになります。プレビューのスクロールはShift+↓やShift+↑で行えます。他にもプレビューの位置やプレビューのサイズの設定はmanコマンドで確認できます。
エイリアスの設定
fzfコマンドで作業したいものはエイリアスで設定しておくと便利なものもあります。例えば、ファイルを選択してエディタで開く操作は
1 2 |
alias fo='vim $(fzf)' alias fo='fzf --bind "enter:become(vim {})"' # 一応、こっちのほうが何も選択しないときにvimを開かない |
みたいに登録しておくと便利です。エイリアスの設定は~/.bashrc等に書き込んでおくとbashの起動時にエイリアスを設定できます。
まとめ
fzfは、シンプルながら非常に強力なツールです。Linux初心者にとってはターミナル操作の効率を格段に上げる入口となり、上級者にとっては複雑なワークフローをカスタマイズするための武器になります。
特に、膨大なデータやリストから必要なものを瞬時に見つける能力は、日々の作業を大幅にスピードアップでき、快適な作業ができるようになります。
外部リンク
GitHub - junegunn/fzf: :cherry_blossom: A command-line fuzzy finder