pecoを使ったzshのhistory検索をもう少し便利にする
pecoを使うと,zshのhistoryをインクリメンタルサーチできるので便利.
[Mac][zsh]コマンドのインクリメンタルサーチツールpecoを使ってzshのhistory(Ctrl+r)をpeco表示 | Coffee Breakにプログラミング備忘録
でも,そのhisotryの中には,間違ったコマンドなんかもあって,そういうのをpecoの結果から引き当ててしまうと,コマンドは失敗するし,historyに失敗したコマンドが追加されてあまり良くない.
なので,historyに溜まっているコマンド列を数えて,多い順にソートして表示してやるようにした.
以下の設定を.zshrc内に記述
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 | \ sort | \ uniq -c | \ sort -r | \ sed -e 's/^[ ]*//g' | \ cut -d " " -f 2-100 | \ peco --query "$LBUFFER") CURSOR=$#BUFFER zle clear-screen } zle -N peco-select-history bindkey '^r' peco-select-history
調べてみると,uniqコマンドを使うと行の数も表示しながら重複した行をまとめてくれるらしいので,それを使ってソート.
sedとcutで,表示されている行数を削除してやるという方針で書いた.