はじめに
この記事は新歓ブログリレー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"
↩︎