私のpeco活用事例
pecoというインタラクティブに入力をフィルタして出力するコマンドがあって、使い始めてからシェルの操作方法が大幅にかわり、だいぶライフチェンジングだった。
最近このへんが流行ってるのでやたら記事あるけど、せっかくなので僕も使い道を紹介しようと思う。
pecoをzshで使う
1. peco ghq
ghqを使ったローカルリポジトリの統一的・効率的な管理についてのこと。
僕も$GOPATH
は$HOME
にしていて、今のところ別に困ることはない。
go get
したりghq get
したりして美しくディレクトリ切った上で、pecoに割り当てておいたC-s
ですぐ目的のディレクトリ開けるようにしてあるので、めちゃくちゃソース管理が楽になった。
function peco-src() { local selected_dir=$(ghq list | peco --query "$LBUFFER") if [ -n "$selected_dir" ]; then BUFFER="cd ${GOPATH}/src/${selected_dir}" zle accept-line fi zle redisplay } zle -N peco-src stty -ixon bindkey '^s' peco-src
ちなみにC-s
にbindkeyするのちょっとハマって、stty -ixon
しないと動かなかった。
2. peco git branch
alias -g B='`git branch | peco | sed -e "s/^\*[ ]*//g"`'
B
というグローバルエイリアスを割り当てていて、git checkout B
とかgit branch -D B
とかやる。
なんかその一連の流れを1つのエイリアスにまとめてる人がいるけど、個人的にはブランチ名が来るべきところにエイリアス打つのが一番しっくり来る。
ちょっと前までzshのcompletionもまともに使ってなくて、ブランチ長いのうつのめんどくさいなーと思ってたけど、効率よく作業できるようになった。
補完使うよりも最初から候補が綺麗に画面に出てカーソル移動して選択できるほうが便利。
3. peco select history
C-rをpecoで選べるようにするやつ。
pecoとかpercol使ってる人みんなやってると思う。すごい便利。
function peco-select-history() { BUFFER=$(fc -l -r -n 1 | peco --query "$LBUFFER") CURSOR=$#BUFFER zle redisplay } zle -N peco-select-history bindkey '^r' peco-select-history
4. peco find file
補完が大変な深いファイルパスを入力するのにfindとpecoを使うやつ。 カレントディレクトリがgitリポジトリの場合はgit ls-filesを使ってゴミファイルを無視している。
以下はキーバインドをC-qに割り当てた例で、上の動画のように複数選択に対応するために少し長めのコードになっている。
function peco-find-file() { if git rev-parse 2> /dev/null; then source_files=$(git ls-files) else source_files=$(find . -type f) fi selected_files=$(echo $source_files | peco --prompt "[find file]") BUFFER="${BUFFER}${echo $selected_files | tr '\n' ' '}" CURSOR=$#BUFFER zle redisplay } zle -N peco-find-file bindkey '^q' peco-find-file
pecoを導入してみて思ったこと
ツールの使い方覚えるの正直大変だけど、省ける手間はできるだけ省きたい。