反省はしても後悔はしない

Vim とか備忘録とか。それと関数型言語勉強中

ターミナル上で unite.vim っぽいことをする peco が大変便利

peco って

タイトルにあるように、ターミナル上で unite.vim っぽいことができるようになります。 標準入力を受け取って、インクリメンタルな絞り込みをして標準出力に投げることができます。 zsh をちょっと書く必要がありますが、任意のソースをインクリメンタルに検索した後任意のコマンドを実行するみたいなこともできます。 他にも似たようなものとして zaw とか percol とかあるっぽいです。 peco が golang で書かれていること以外は違いはよくわかっていません。(お

github のページに行くとスクリーンショットが見れます。

peco/peco

インストール

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 を使った方が便利だけど)