Linux

LinuxMintのzsh上でpecoをコマンド履歴の検索に用いる方法

pecoっていうのは標準入力に受けた情報を複数のキーワードによって絞り込み検索できる便利な奴なんです。
こんな感じで。

peco
※画像は[Mac] zsh+oh-my-zsh環境にpecoを導入&初期設定を行う | vdeepさんからお借りしました。

まず、PecoはGoLangのパッケージですので、Goをインストールします。

こちらを参考にさせてもらいました。
Ubuntu12.04にGoを入れてPecoが使えるようになるまで(bash編) – Qiita

wget, git がなければ入れておく

sudo apt-get -y install wget
sudo apt-get -y install git-core

ソースコードDL & インストール

wget https://go.googlecode.com/files/go1.2rc2.linux-amd64.tar.gz
sudo tar zxvf ~/go1.2rc2.linux-amd64.tar.gz -C /usr/local

.zshrcに追記

export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

確認

source .zshrc
which go

Peco のインストール & 設定
インストール(数秒待つ)

go get github.com/peco/peco/cmd/peco

これで

which pecoと打ってみるとpecoの場所が表示されているようなら準備OKです。pecoが使えるようになりました。

ためしに

ls | peco

などやってみて動作を確認してみましょう。

pecoでコマンド履歴の検索をできるようにする

一応mac用とlinux用両方貼っておきます。

# OS 別の設定
case ${OSTYPE} in
    darwin*)
        #Mac用の設定
        #履歴検索にPecoを使用
        function peco-history-selection() {
        BUFFER=`history -n 1 | tail -r  | awk '!a[$0]++' | peco`
        CURSOR=$#BUFFER
        zle reset-prompt
        }

        zle -N peco-history-selection
        bindkey '^R' peco-history-selection
        ########################################
    ;;
    linux*)
        #Linux用の設定
        #履歴検索にPecoを使用
        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
        ########################################
    ;;
esac

Linux用のc-rでヒストリーをpecoに渡す方法はここじゃなくて別の所でみた気がするんだけど、同じコードだったので、こちらを参考にさせていただきました。

oh-my-zsh の環境で、peco-select-history が動かない – Qiita

MacOS用の履歴をpecoで見るコマンドは結構情報が多いのだが、linux用は少なかったので見つけるのに苦労した。

自分で書いてみたけど、上手く動かせなかった。まだまだシェルスクリプトは学ぶべきところが多いです。

で上の参考コードを見つけたという事です。

tacがなければtail -rを実行しているようだけれども、僕の環境ではtailに-rというオプションはそんざいしなかった。

なので実際には

function peco-select-history() {                           
    BUFFER=$(\history -n 1 | tac | peco --query "$LBUFFER")
    CURSOR=$#BUFFER                                        
    zle clear-screen                                       
}                                                          
zle -N peco-select-history                                 
bindkey '^r' peco-select-history                           

こう書きなおして使っている。シンプルで見通しやすくなった。

ということでlinuxでもpecoで履歴の参照ができるようになりました。

通常、bash,zshでは一文字でコマンド履歴を検索しなければなりませんが、pecoを使うと1つ以上の単語のアンドで履歴を絞り込めるのが大変便利。
絞り込んだ後に一覧から選べるので更に便利。

コマンド履歴は日頃しょっちゅう使うので導入に際しての費用対効果はかなり高い。

コマンド履歴に限らず、色んなシーンで使えて大変便利ですpeco。

Linux mintのシェルをbashからzshに変更する方法前のページ

Elcapitanの環境でtmuxのステータスバーに電池残量とwifi情報、日付を表示する方法次のページ

最近の記事

Twitter

PAGE TOP