pecoって快適ターミナル生活
インタラクティブにフィルタリングしてくれるgolang製のpecoというツールが 大変便利だったのでシェアしたいと思います。 記事を探してると2年前くらいに話題なったそうです。 pecoにデジャブを感じたのはおそらく当時その話題を見たからだと思います。
pecoのインストール
さくっとpecoをインストールします。
$ brew install peco
goのランタイムがあればgo get github.com/peco/peco
でもOKですが、公式でもstableであるbrewからのインストールを推奨しています。
試しにフィルタリングしてみましょう。 小さい機能を合成して大きな機能を実現するUnixの思想が踏襲されているのでパイプでつなげることができます。
$ ps -ef | peco
実行するとpecoのインタラクティブUIに変わりました。 ファジー検索なので適当にタイプすると徐々に絞り込まれていきます。
zshに変更する
ここからより便利にpecoるためにzshにしたいと思います。 なぜzshにしたいかというとautocomplite機能があることとグローバルエイリアスの設定できるのが理由です。
現在のシェルの確認 $ echo $SHELL # デフォルトシェルの変更 $ chsh -s /bin/zsh
ログインし直しzshに変更されていればOKです。
このままでは味気ないので.zshrc
を設定してあげればOKです。
oh-my-zshという集合知みたいなツールもあるのでこれを入れてもOKだと思います。
僕は自分で色々設定するのがめんどうだったのでこれ入れてます。
ghqとpecoのコンビネーション
ghqとはGit/Mercurialリポジトリの管理ツールです。ghq get リポジトリ
で指定したパスへクローンし、統一的に管理することができます。
brewで入れたあと、git config --global ghq.root $GOPATH/src
で統一的に管理するパスの設定をしておきます。
使い方はgo get
と似ていて、柔軟な形でクローンすることができます。
# こんな形でも ghq get git@github.com:motemen/ghq.git # こんな形でも ghq get https://github.com/motemen/ghq
機能としては小さいですがpecoと組み合わせると絶大な効果を発揮します。
以下の関数を追加してリポジトリ移動を便利にしてみます。
# リポジトリ移動 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
ctrl+s
でインタラクティブUIに変わりリポジトリを選択すると移動することができます。
他にも便利にする関数を追加すると幸せになるかもしれません。
履歴検索
ctrl+r
# 履歴検索 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
ファイル検索
ctrl+z
# ファイル検索 function peco-path() { local filepath="$(find . | grep -v '/\.' | peco --prompt 'PATH>')" [ -z "$filepath" ] && return if [ -n "$LBUFFER" ]; then BUFFER="$LBUFFER$filepath" else if [ -d "$filepath" ]; then BUFFER="cd $filepath" elif [ -f "$filepath" ]; then BUFFER="$EDITOR $filepath" fi fi CURSOR=$#BUFFER } zle -N peco-path bindkey '^z' peco-path
プロセスkill
ctrl+k
# プロセスkill function peco-kill-process () { ps -ef | peco | awk '{ print $2 }' | xargs kill zle clear-screen } zle -N peco-kill-process bindkey '^k' peco-kill-process
まとめ
ターミナル生活が楽しくなりそうですね。
勉強用にpecoのRust実装でもしてみたいです。