mirror of
https://github.com/jimeh/zsh-peco-history.git
synced 2026-02-18 21:26:39 +00:00
50 lines
1.3 KiB
Bash
50 lines
1.3 KiB
Bash
# zsh-peco-history 0.10.0
|
|
#
|
|
# Search shell history with peco when pressing ctrl+r.
|
|
# https://github.com/jimeh/zsh-peco-history
|
|
#
|
|
# Requirements:
|
|
# - peco: https://github.com/peco/peco
|
|
# - zsh: https://www.zsh.org/
|
|
# - tac, or tail with support for -r option
|
|
# - perl, awk, or uniq if de-duplication is turned on
|
|
#
|
|
# Based on: https://github.com/mooz/percol#zsh-history-search
|
|
|
|
if (( $+commands[peco] )); then
|
|
if ! (( ${+ZSH_PECO_HISTORY_OPTS} )); then
|
|
ZSH_PECO_HISTORY_OPTS="--layout=bottom-up"
|
|
fi
|
|
|
|
function peco_select_history() {
|
|
local parse_cmd
|
|
|
|
if (( $+commands[gtac] )); then
|
|
parse_cmd="gtac"
|
|
elif (( $+commands[tac] )); then
|
|
parse_cmd="tac"
|
|
else
|
|
parse_cmd="tail -r"
|
|
fi
|
|
|
|
if [ -n "$ZSH_PECO_HISTORY_DEDUP" ]; then
|
|
if (( $+commands[perl] )); then
|
|
parse_cmd="$parse_cmd | perl -ne 'print unless \$seen{\$_}++'"
|
|
elif (( $+commands[awk] )); then
|
|
parse_cmd="$parse_cmd | awk '!seen[\$0]++'"
|
|
else
|
|
parse_cmd="$parse_cmd | uniq"
|
|
fi
|
|
fi
|
|
|
|
BUFFER=$(fc -l -n 1 | eval $parse_cmd | \
|
|
peco ${=ZSH_PECO_HISTORY_OPTS} --query "$LBUFFER")
|
|
|
|
CURSOR=$#BUFFER # move cursor
|
|
zle -R -c # refresh
|
|
}
|
|
|
|
zle -N peco_select_history
|
|
bindkey '^R' peco_select_history
|
|
fi
|