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