oinume journal

Scratchpad of what I learned

ターミナル環境を見直す: pecoからfzfへ

コマンドの履歴やディレクトリ移動の履歴を選択するためのツールとして長らくpecoを使ってきたけど、fzfに移行してみた。理由は大したものではなく

  • pecoはshellで複数行のコマンドを検索して実行する場合に、 \\\ と2重になってしまうという問題があった
  • 日本国外だとpecoではなくてfzfの方が使われていそう

というもの。

インストール

github.com

リポジトリのREADMEに書いてあるので省略

設定

cdr

ディレクトリの移動履歴をfzfで検索するようにする。zshの設定は以下のような感じ。

function fzf_cdr () {
  local selected_dir=$(cdr -l | awk '{ print $2 }' | fzf --query "$LBUFFER")
  if [ -n "$selected_dir" ]; then
    BUFFER="cd ${selected_dir}"
    zle accept-line
  fi
  zle clear-screen
}

zle -N fzf_cdr
bindkey "^@" fzf_cdr

function fzf_select_history() {
    local tac
    exists gtac && tac="gtac" || { exists tac && tac="tac" || { tac="tail -r" } }
    BUFFER=$(fc -l -n 1 | eval $tac | peco --query "$LBUFFER")
    CURSOR=$#BUFFER         # move cursor
    zle -R -c               # refresh
}

zle -N fzf_select_history
bindkey '^R' fzf_select_history

感想

pecoはshellで複数行のコマンドを検索して実行する場合に、 \\\ と2重になってしまうという問題があった

この問題が解決されたので自分としてはこれだけでも満足度が高い。また、fzfは環境変数で見た目や挙動を変えられるのが良いと思っている。自分は以下のように設定している。

export FZF_DEFAULT_COMMAND='rg --files --hidden --glob "!.git"'
export FZF_DEFAULT_OPTS='--height 60% --border'

zsh最強シェル入門

zsh最強シェル入門