ラベル peco の投稿を表示しています。 すべての投稿を表示
ラベル peco の投稿を表示しています。 すべての投稿を表示
2014/09/22

[zsh]peco で git をもっと便利にする

peco を導入しました。すごく便利です。
導入についてはコチラ↓
peco を導入した | DevAchieve

peco で色々フィルタリングして選択できるのは
ファイル、ハッシュ、ブランチを選択する事が多い Git と相性が良さそうです。

peco script を色々作るとエイリアスとか大変っぽいので
zsh のグローバルエイリアスを使ってみました。

編集されたファイルをフィルタリングする

function peco-git-changed-files(){
    git status --short | peco | awk '{print $2}'
}
alias -g F='$(peco-git-changed-files)'

使い方

git add F
Ctrl + Space で複数ファイル選択して add も可能です。

コミットのハッシュをフィルタリングする

function peco-git-hash(){
    # git log --oneline --branches | peco | awk '{print $1}'
    git lg | peco | sed -e "s/^[\*\|][ |\\\/\*]*//g" | awk '{ print $1 }'
}
alias -g F='$(peco-git-hash)'
[alias]
 lg = log --all --graph --decorate --oneline
git lg (log graph) は僕の git log を置き換えるコマンドです。
以下のようにコミットが確認できるので履歴確認、ブランチ確認、マージする際に便利なコマンドです。

peco ではこの色付けがなくなってしまうので残念です。頑張って保持して欲しいところ。

使い方

git diff F とか git cherry-pick F とか。
おおよそコミットのハッシュを指定するところ全てで使えるんじゃないですかね?
git diff で複数選択とか便利です。

ブランチをフィルタリングする

function peco-git-branch(){
    git branch | peco | sed -e "s/^\*[ ]*//g"
}
alias -g B='$(peco-git-branch)'

使い方

git checkout B とか
git merge B とか
git diff B など。

参考

pecoでgit向けの汎用的なフィルターを2つ作成してみた - Qiita
私のpeco活用事例 - k0kubun's blog

peco を導入した

コマンドラインの行選択ツール peco を導入しました。
peco - Simplistic Interactive Filtering Tool
どんなものかわからないと思うので上のリンクから Demo の gif 画像を見て下さい。
なんとなく便利そうな雰囲気がしますよね?

インストール

それではインストールしてみましょう。Mac では Homebrew で以下の通り。
brew tap peco/peco
brew install peco
それ以外の場合は上のリンクからインストール方法を確認して下さい。
Go で作られているのでインストールが簡単らしいです。

peco のカスタマイズ

peco はパイプでコマンドの出力を行選択して、パイプで次のコマンドに渡すコマンドラインツールなわけだけど
ある程度頻繁に使いそうなものについてはスクリプトファイルを書いておいたほうが便利ですね。
こういうものはどんどん拡張したくなるのでスクリプトファイルの保存場所を決めておきます。
~/.zshrc
~/.zsh/peco-scripts/ の読み込みやキーバインドの設定
~/.zsh/peco-scripts/
peco のスクリプトファイルの保存場所

# load peco scripts (require cdr)
for f (~/.zsh/peco-scripts/*) source "${f}"
% tree peco-scripts
peco-scripts
├── peco-cdr.zsh
└── peco-select-history.zsh

peco-cdr.zsh: 開いたディレクトリの履歴からディレクトリを選択する

[zsh]cdr: 開いたディレクトリの履歴からディレクトリを開く | DevAchieve
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
# 履歴から cd
bindkey '^@' peco-cdr

peco-select-history.zsh: コマンドの履歴からコマンドを選択する

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

追記: 2014/12/10
コマンド履歴の重複を削除して peco で選択できるようにしました。
[peco]peco-select-history.zsh で表示されるコマンド履歴の重複を削除する - Qiita

まとめ

使ってみるとわかりますが、すごく便利です!

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

タグ(RSS)