fzfを使ってターミナルでの作業を効率化する
タイトルの通りですが、自分なりにfzfを使ってターミナルでの作業を効率化できたので、メモ。
すごく快適になるので、試してみてほしいです!
fzfを使うと、どのように効率化できるのか?
ターミナル内でのディレクトリの移動が快適にできるようになります。
以下のgifにもある通り、ghqを使うことでリポジトリの移動が快適になります。
どちらかといえば、pecoのほうが人気な気がしますが、Vimとの連携もできるので、Vimを使っている方にもおすすめです。
シンプルにfzfコマンドを実行する
まずは、シンプルにfzfを実行する。
ちなみに、私は以下のデフォルトオプションを設定しています。
1export FZF_DEFAULT_OPTS="--height 50% --layout=reverse --border --inline-info --preview 'head -100 {}'"
ghqとfzfを連携する
ghqと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
Vimで開く
1vim $(fzf)
–heightオプションをつけて実行する
1vim $(fzf --height 40%)
–reverseオプションをつけて実行する
1vim $(fzf --height 40% --reverse)
デフォルトのオプションを設定する
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: