Teruhiro Komaki's Blog (Temporary)

fzfを使ってターミナルでの作業を効率化する

タイトルの通りですが、自分なりにfzfを使ってターミナルでの作業を効率化できたので、メモ。

すごく快適になるので、試してみてほしいです!

fzfを使うと、どのように効率化できるのか?

ターミナル内でのディレクトリの移動が快適にできるようになります。

以下のgifにもある通り、ghqを使うことでリポジトリの移動が快適になります。

どちらかといえば、pecoのほうが人気な気がしますが、Vimとの連携もできるので、Vimを使っている方にもおすすめです。

シンプルにfzfコマンドを実行する

まずは、シンプルにfzfを実行する。

fzf

ちなみに、私は以下のデフォルトオプションを設定しています。

1export FZF_DEFAULT_OPTS="--height 50% --layout=reverse --border --inline-info --preview 'head -100 {}'"

ghqとfzfを連携する

ghqとfzfを連携して、リポジトリの移動をする。

fzf

各種リンク

インストール

GitHubを見るのが良いと思いますが…

一応ね…

macの場合、brewでインストールできます。

1brew install fzf

Ubuntuでは、リリースからバイナリをダウンロードして、パスを通して使っています。

まずは、使ってみる

gifにもあったように、fzfを実行してファイルを選択すると、該当のファイル名を受け取れます。

1~/go/src/github.com/google/skicka [master=] $ fzf
2README.md

GitHubの引用ですが、以下のような感じで利用できます。

フォルダを選択する

1find * -type d | fzf

fzf

Vimで開く

1vim $(fzf)

fzf

–heightオプションをつけて実行する

1vim $(fzf --height 40%)

fzf

–reverseオプションをつけて実行する

1vim $(fzf --height 40% --reverse)

fzf

デフォルトのオプションを設定する

1vim $(fzf --height 40% --reverse)
2export FZF_DEFAULT_OPTS='--height 40% --layout=reverse --border'
1export FZF_DEFAULT_COMMAND='fd --type f'

Wikiをみる

やりたいことは、Wikiを見れば分かると思います。

ghqとの連携で使っている関数

1# fdg - ghq
2fdg() {
3  local selected
4  selected=$(ghq list | fzf)
5
6  if [ "x$selected" != "x" ]; then
7    cd $(ghq root)/$selected
8  fi
9}

Wikiから引用して、私が使っている関数など

1# fh - repeat history
2fh() {
3  eval $( ([ -n "$ZSH_NAME" ] && fc -l 1 || history) | fzf +s --tac | sed 's/ *[0-9]* *//')
4}
 1# fkill - kill process
 2fkill() {
 3  local pid
 4  pid=$(ps -ef | sed 1d | fzf -m | awk '{print $2}')
 5
 6  if [ "x$pid" != "x" ]
 7  then
 8    echo $pid | xargs kill -${1:-9}
 9  fi
10}
1# fd - cd to selected directory
2fd() {
3  local dir
4  dir=$(find ${1:-.} -path '*/\.*' -prune \
5                  -o -type d -print 2> /dev/null | fzf +m) &&
6  cd "$dir"
7}
1# fda - including hidden directories
2fda() {
3  local dir
4  dir=$(find ${1:-.} -type d 2> /dev/null | fzf +m) && cd "$dir"
5}
 1# fshow - git commit browser
 2fshow() {
 3  git log --graph --color=always \
 4      --format="%C(auto)%h%d %s %C(black)%C(bold)%cr" "$@" |
 5  fzf --ansi --no-sort --reverse --tiebreak=index --bind=ctrl-s:toggle-sort \
 6      --bind "ctrl-m:execute:
 7                (grep -o '[a-f0-9]\{7\}' | head -1 |
 8                xargs -I % sh -c 'git show --color=always % | less -R') << 'FZF-EOF'
 9                {}
10FZF-EOF"
11}
 1# tm - create new tmux session, or switch to existing one. Works from within tmux too. (@bag-man)
 2# `tm` will allow you to select your tmux session via fzf.
 3# `tm irc` will attach to the irc session (if it exists), else it will create it.
 4
 5tm() {
 6  [[ -n "$TMUX" ]] && change="switch-client" || change="attach-session"
 7  if [ $1 ]; then
 8    tmux $change -t "$1" 2>/dev/null || (tmux new-session -d -s $1 && tmux $change -t "$1"); return
 9  fi
10  session=$(tmux list-sessions -F "#{session_name}" 2>/dev/null | fzf --exit-0) &&  tmux $change -t "$session" || echo "No sessions found."
11}

あとがき

pecoもfzfもGo製ってのがいいですね!

Tags:
comments powered by Disqus