ターミナル上で unite.vim っぽいことをする peco が大変便利
peco って
タイトルにあるように、ターミナル上で unite.vim っぽいことができるようになります。 標準入力を受け取って、インクリメンタルな絞り込みをして標準出力に投げることができます。 zsh をちょっと書く必要がありますが、任意のソースをインクリメンタルに検索した後任意のコマンドを実行するみたいなこともできます。 他にも似たようなものとして zaw とか percol とかあるっぽいです。 peco が golang で書かれていること以外は違いはよくわかっていません。(お
github のページに行くとスクリーンショットが見れます。
インストール
golang が入っているなら
go get github.com/peco/peco/cmd/peco
で入ります。簡単ですね。
簡単な使い方
ps aux | peco
ps
コマンドの結果を絞りこみ検索できます。
zsh で拡張してみた
単純に絞り込むだけじゃなくて、絞り込んだ結果を使っていろいろしたい場合は zsh のスクリプトを書くと便利です。
準備として .zshrc
にこんな感じで書いておきます
[[ -e ~/peco.zsh ]] && source ~/peco.zsh
peco.zsh
というファイルに色々書いていきます。
pushd したディレクトリ一覧から選んで cd する
function peco-pushd() { eval cd $(pushd | sed -e "s/ /\n/g" | peco) zle reset-prompt } zle -N peco-pushd bindkey "^a" peco-pushd
以前いたことがあるディレクトリ位置に簡単に cd
できるようになります。
あらかじめ setopt auto_pushd
しておくとなお一層便利です。
git log の結果から SHA-1 ハッシュを取得して入力する
function peco-git-log() { GIT_COMMIT_HASH=$(git log --oneline --graph --all --decorate | peco | sed -e "s/^\W\+\([0-9A-Fa-f]\+\).*$/\1/") BUFFER=${BUFFER}${GIT_COMMIT_HASH} CURSOR=$#BUFFER } zle -N peco-git-log bindkey "^b" peco-git-log
たとえば、git checkout -b hoge
まで入力した後で、<C-b>
を押すと git log
の結果が peco で表示されます。
望みのコミットを絞り込んで Enter
を押すと、例えば git checkout -b hoge 0123abc
みたいな感じで選んだコミット位置からブランチを生やすことができます。
(まぁ、Vim から gitv を使った方が便利だけど)