Open2

雑に書いた fzf functions

kazukazu

About

雑に書いたfzfの関数を気が向いたときに雑に挙げていきます.
動けば良いやで作ってるので,ご了承を & improvement 歓迎です

fzfとは

fzf is a general-purpose command-line fuzzy finder.

https://github.com/junegunn/fzf

です.
日本語で言うと「あいまい検索」とか.
ググればたくさん良記事があるのでそちらを参考して頂きたいですが,ざっくり言うと
「たくさん有る候補の中から,それっぽい文字列を打ち込んで徐々にターゲットを絞っていく」やつです.
例で言えば,
「今いるdirectory配下のあのファイルをcatしたいけど,正確なpath覚えてない」って時に,

  1. directory配下のファイル名全部取得
  2. 覚えている範囲でファイル名入力していく
  3. 絞り込まれた候補から目的のファイルを選択する

みたいに使います.
正確なpathが分からなくても楽に絞り込んでいけるので便利

kazukazu

fuzzy cat

current directory配下のファイルを絞り込んでcat

fcat (){
  local selected
  if [ $# = 0 ];then
    selected=$(fd --color=always -t f | fzf --preview "bat  --color=always --style=header,grid --line-range :100 {}")
  else
    if [ -f $1 ]; then
      selected=$1
    else
      selected=$(fd --color=always -t f | fzf --query "$1" --preview "bat  --color=always --style=header,grid --line-range :100 {}")
    fi
  fi

  if [ -n "$selected" ];then
    print -s "bat $selected"
    bat $selected
  else
    echo "No file is selected"
  fi
}

findの代わりに
https://github.com/sharkdp/fd

catの代わりに
https://github.com/sharkdp/bat

を使ってます.
後 コマンド履歴にちゃんと実行時のコマンドを残したいので

    print -s "bat $selected"

してます.

挙動的には

  • 引数あれば初期クエリとして引数を与えてる
  • 引数がそのまま有効なファイルpathになっていればそのままそれを選択
  • 選択中にpreviewとしてbatした内容を表示