• このエントリーをはてなブックマークに追加


はじめに

peco でなんだかいろいろ捗りそうです.(そういえば,percol は触ったことなかった.)

手始めに,「昔書いた zsh コマンドヒストリ grep 検索のヤツ」(hs コマンド?関数?として使用):

を,peco に通して使えるようにしてみました.とりあえず hspeco としてます.

ソースコード

zsh の関数として定義しています:

function hs () {
    local n_hist_default=1000000
    local colors; colors=(32 33 34 35 36 31)
 
    local n_hist=${1#-}
 
    if [ ! "$1" = ""  -a  ! $n_hist = $1 ]; then
        shift
        if [ $n_hist -gt 0 ]; then
        else
            n_hist=$n_hist_default
        fi
    else
        n_hist=$n_hist_default
    fi
 
    local words; words=($*)
    local greps
    local grep
    local color
    local i=0
 
    for w in $words; do
        if [ $i -lt $#colors[@] ]; then;
            i=$(expr $i + 1)
        fi
        if [ "$HS_NOCOLOR" = "1" ]; then
            grep="grep --color=no \"${w}\""
        else
            color=$colors[$i]
            grep="GREP_COLOR=\"01;$color\" grep \"${w}\""
        fi
        greps="${greps} | ${grep}"
    done
 
    cmd="\history -${n_hist} ${greps}"
    eval $cmd
}
 
function hspeco () {
    local n_hist=${1#-}
    if [ ! "$1" = ""  -a  ! $n_hist = $1 ]; then
        shift
    fi
    HS_NOCOLOR=1 hs "$n_hist" $* | peco --query "$*" | sed -E 's/^[0-9]+[ ]+//g'
}

おわりに

コマンド履歴に対して hs コマンドでざっと検索して,そこから peco でさらに絞り込む,そんな感じの使い方になりますかね.