feature image

2020年4月13日 | ブログ記事

fzfを使ってみた【新歓ブログリレー2020 36日目】

はじめに

この記事は新歓ブログリレー2020 36日目の記事です。
こんにちは。新入生の皆さん、入学おめでとうございます。19Bのhosshiiです。SysAd班に所属しています。

fzfとは

fzfは、標準入力の内容を曖昧検索して標準出力に出力するツールです。go言語で書かれています。似たようなものにpecoというものがあります。

fzfをいれる

まずは導入していきます。先ほどの公式ページのinstallのとこをに書いてある通りにやります。

$ brew install fzf

次のコマンドもやっておくと便利です(キーマップの有効化とか)。

$ (brew --prefix)/opt/fzf/install

fzfを使う

fzfの使い方

まずどこかのディレクトリでlsをしてみましょう。次に、fzfを使ってみましょう。fzfの標準入力にパイプで渡してあげればいいです。

$ ls | fzf

先ほどlsで表示されたものがカーソルで上下に移動して選択できるようになってると思います。また、キーボードから入力すると、検索結果を絞り込むことができます。
カーソルで上下したり絞り込んだりしたら、どこかの行でEnterを押してみましょう。選択したものが標準出力に出力されます。

ディレクトリ移動してみる

これをもう少しいじって、選んだディレクトリ に移動できるようにしてみましょう。
まずディレクトリを表示します。これにはls -d */を使います。これを先ほどと同じようにfzfで選択できるようにします。

$ ls -d */ | fzf

これで選択できるのでそれをcdコマンドに渡します。

$ cd "$(ls -d */ | fzf)"

$()は、カッコ内のコマンドを実行した文字列に置き換えられます。

これでできました。しかしこれだと一つ下のディレクトリ にしか移動できないので、もっと下にも移動できるようにしてみましょう。これにはfindコマンドが使えます。

$ cd $(find . -type d| fzf)

これで一つ以上下のディレクトリにも移動できるようになりました。

オプション

fzfには色々なオプションがあります。その中で自分が便利だと思った物をいくつか紹介します。

--previewオプション

カーソルがある行の内容を用いてコマンドを実行して、その結果をプレビューとして表示できます。
--preview "<コマンド>"とします。{}という文字列を使用すると、そこが現在カーソルがある行の内容になります。

ここでは ls |fzf --preview "cat {}"というコマンドを実行しています。lsの結果をfzfで選択できるようにして、ファイルだったら内容をcatで表示しています[1]

--tacオプション

入力を反転して表示できます。catの逆なのでtacです。tacコマンドというのもあります。findと一緒に使うとみづらくなります。

-0オプション

入力が0個の時は、fzfを起動しても意味がないのでfzf起動しないようになります。似たようなオプションに-1オプションがあって、これは入力が1つの時にその入力をそのまま返すようにします。

--ansiオプション

色をつけられるようになります。

まとめ

fzf自体は標準入力から検索して標準出力に出力するというツールですが、組み合わせると色々なことができます。gitとかと組み合わせると結構いい感じになります。
fzf公式wikiにいろいろとのっているのでみてみると楽しいです。

明日は@idatenさんの記事です。お楽しみに!


  1. このままだとファイル以外(ディレクトリなど)にカーソルが移動した時にエラーになります。それが嫌な場合、if文などで分岐をして処理を変えるようにするといいと思います。例えば、ファイルの場合は先ほどと同じようにcatで中身を表示して、ディレクトリならtreeコマンド(ディレクトリの中をツリー状に表示します)で表示します(catの代わりにheadコマンドを使ってます)。$ ls |fzf --preview "if [ -d {} ];then tree {}|head -100;elif [ -f {} ];then head -100 {};fi" ↩︎

hosshii icon
この記事を書いた人
hosshii

SysAd班に所属してます

この記事をシェア

このエントリーをはてなブックマークに追加
共有

関連する記事

2022年11月11日
ISUCON11の運営・作問に参加しました
oribe icon oribe
2021年9月4日
自作キーボードしてみた
hosshii icon hosshii
2021年1月12日
2020春ハッカソン18班 traPixiv「piQ」
tararira icon tararira
2020年9月16日
学生枠でISUCON10の予選を通過しました
oribe icon oribe
2019年11月20日
AAっぽい動画を作る【Advent Calendar 2019 21日目】
hosshii icon hosshii
2019年7月12日
WEBエンジニアになろう講習会に参加した話
hosshii icon hosshii
記事一覧 タグ一覧 Google アナリティクスについて 特定商取引法に基づく表記