̃Gg[͂ĂȃubN}[Nɒlj

Unix :: コマンド / peco



コマンド説明
pecopython のツールである percol がベースのコマンド。標準出力(STDOUT)に対してフィルタリング機能が提供され、インタラクティブ(インクリメンタル)に操作が可能になる

peco の概要

標準出力(STDOUT)に対してフィルタリング機能を提供します。
インクリメンタルに絞り込めるので、現在の表示を見ながら直感的に操作できます。
バイナリファイル単体で動作するため、/usr/local/bin/ などの PATH の通っているディレクトリに配置するだけで、すぐに動作します。

通常は

% ps aux | peco

のように、標準出力をパイプで渡して利用します。

もちろんこれも便利なのですが、今回おすすめしたいのは「シェルのコマンド履歴と peco の連携」です。
連携させることで超絶便利になり、快適なシェルライフを送ることが出来ます。


シェルのコマンド履歴と peco の連携

peco を連携させた状態で「Ctrl-r」とすると以下のように直近で入力したコマンドが新しい順に表示されます。
そして、コマンドを選択することでコマンドの再利用が可能になります。

シェルのコマンド履歴と peco の連携

※ コマンドを選択して「エンターキー」を押すか、「Ctrl-c」で通常のプロンプトに戻れます。


関連するコマンドの抽出

例えば「あの長ったらしいコマンド何だったけ?」という時、「Ctrl-r」とタイプしてコマンド履歴を探すことがあると思います。
しかし、通常は一覧表示されないので、とっても探しにくいです。

peco と連携状態にあれば、コマンドに含まれる文字列を入力することで、関連する過去のコマンド履歴がインクリメンタルに一覧表示されます。
視認性が良いので、お目当てのコマンドがすぐに発見できます。

もちろん、探し出したコマンドは再び実行することが可能です。
以下の例では「git」で絞り込んでいますが、このように「git」が含まれるコマンドのみを抽出することが出来ます。

関連するコマンドの抽出

シェル上で

% git

と入力してから、「Ctrl-r」としても同様の状態になります。


peco のインストール

今回は「v0.2.12」の「peco_linux_386」を適用しました。
環境に合った最新版を以下より探して、適宜適用してください。
https://github.com/peco/peco/releases

  • ダウンロードとコマンドの配置
% wget 'https://github.com/peco/peco/releases/download/v0.2.12/peco_linux_386.tar.gz' -O peco_linux_386.tar.gz
% tar xvzf peco_linux_386.tar.gz
% cd peco_linux_386
% sudo cp peco /usr/local/bin/
% ll /usr/local/bin/peco


peco とコマンド履歴を連携させる設定

zsh の場合

以下を .zshrc に記述します。

% vi ~/.zshrc
#/**
# * Associate command-history with peco for zsh
# * bindkey '^r'
# */
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

※ キーバインドは「Ctrl-r」です。お好みにより適宜変更してください。


bash の場合

以下を .bashrc に記述します。

% vi ~/.bashrc
#/**
# * Associate command-history with peco for bash
# * bindkey '^r'
# */
function peco-select-history() {
    local tac="tail -r"
    if [ -n "`which tac 2> /dev/null`" ]; then
        tac="tac"
    elif [ -n "`which gtac 2> /dev/null`" ]; then
        tac="gtac"
    fi
    local l=$(HISTTIMEFORMAT= history | ${tac} | sed -e 's/^\s*[0-9]* \+\s\+//' | peco --query "$READLINE_LINE")
    READLINE_LINE="$l"
    READLINE_POINT=${#l}
}
bind -x '"\C-r":peco-select-history'

※ キーバインドは「Ctrl-r」です。お好みにより適宜変更してください。


設定の反映

.zshrc, .bashrc を編集したら、source コマンドで設定を反映しましょう。

% source ~/.zshrc

or

% source ~/.bashrc


source コマンドを実行したら「Ctrl-r」とタイプします。
peco と連携されているはずです。

シェルのコマンド履歴と peco の連携





unix/command/peco.txt