pecoで履歴を追うのは便利なんですけど、git add notesの使いすぎでnotesって入力しただけで暴力的にgit add notes HEADが履歴候補として出まくる
— 炭鉱ハッカー しげまーくつー (@shigemk2) 2015, 1月 31
どういうことかというと、こういうこと。
なんかめんどうだなあって思っていたら、Qiitaにそのまんまのがありました。
[peco]peco-select-history.zsh で表示されるコマンド履歴の重複を削除する - Qiita
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 | awk '!a[$0]++' | peco --query "$LBUFFER") CURSOR=$#BUFFER # zle clear-screen } zle -N peco-select-history
awkで重複を削除しているって感じですね。そんな感じのシェル芸を昔見たことが有ります。
Linux - ソートしないで重複行を削除する - Qiita
でも、oh-my-zshを使うと、historyにエイリアスがかかっているので、バックスラッシュをつけるとよい。oh-my-zshを使って表題のように重複を削除したい場合は以下のようにやる。
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 | awk '!a[$0]++' | peco --query "$LBUFFER") CURSOR=$#BUFFER # zle clear-screen } zle -N peco-select-history
oh-my-zsh の環境で、peco-select-history が動かない - Qiita
追記
サムネとかいろいろ直しました。