文字っぽいの。

文字を書いています。写真も混ざります。

開発がドチャクソ便利になるpecoの設定4つ

 pecoを導入して数ヶ月たった今、「コレなしで丁寧にコマンド打つの面倒すぎて困る。」と思った、pecoの設定4つを紹介します。

コマンド履歴を検索(Ctrl-Rを拡張)

 Ctrl-Rだと一覧出来なくて不便ですが、これならぱっと見で分かって便利。よく使うbundle exec rails sとかもサクッと探せてよいです。

function peco-select-history() {
    local tac
    if which tac > /dev/null; then
        tac="tac"
    else
        tac="tail -r"
    fi
    BUFFER=$(history -n 1 | \
        eval $tac | \
        peco --query "$LBUFFER")
    CURSOR=$#BUFFER
    zle clear-screen
}
zle -N peco-select-history

bindkey '^r' peco-select-history

最近移動したディレクトリに検索しつつ移動

 とにかく便利。丁寧に../../path/to/dirとか、1回プロジェクトのrootに戻って移動とかしなくて良いので、楽ちん。

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

bindkey '^u' peco-cdr

git addするファイルを選ぶ

 色々ファイルを変更した後で、任意のファイルだけコミットしたいことありますよね。丁寧に$git add path/to/fileを数回うっても良いのですが、さすがに面倒臭いです。これならパッと見て、追加するファイルを選ぶことができます。

function peco-select-git-add() {
    local SELECTED_FILE_TO_ADD="$(git status --porcelain | \
                                  peco --query "$LBUFFER" | \
                                  awk -F ' ' '{print $NF}')"
    if [ -n "$SELECTED_FILE_TO_ADD" ]; then
      BUFFER="git add $(echo "$SELECTED_FILE_TO_ADD" | tr '\n' ' ')"
      CURSOR=$#BUFFER
    fi
    zle accept-line
    # zle clear-screen
}
zle -N peco-select-git-add

bindkey "^g^a" peco-select-git-add

最近更新されたブランチにチェックアウトする

 複数のブランチを行ったり来たりして、開発することはよくあると思います。そんな場合に、全部のブランチ名を覚えてはいられないし、git branchを叩いてから、丁寧にgit checkout branch-nameと入力してあげるのは、非常に面倒です。これなら、更新順にブランチが並んでくれるので、さっと見つけられるしブランチ名も打ち込まなくて良いので楽ちんです。

image

function peco-git-recent-branches () {
    local selected_branch=$(git for-each-ref --format='%(refname)' --sort=-committerdate refs/heads | \
        perl -pne 's{^refs/heads/}{}' | \
        peco)
    if [ -n "$selected_branch" ]; then
        BUFFER="git checkout ${selected_branch}"
        zle accept-line
    fi
    zle clear-screen
}
zle -N peco-git-recent-branches

bindkey "^g^b" peco-git-recent-branches

参考ページ

pecoで最近更新されたブランチにcheckoutする - $shibayu36->blog;

pecoを使い始めた - $shibayu36->blog;

git addするファイルをpecoで選択できるようにした - I/O Error : My Knowledge