Event numbers don't add information to the search: if you knew the event number you wouldn't be searching for the command. Add an option to remove them from the search to declutter it. Default it to true to preserve the current behaviour.
54 lines
1.5 KiB
Bash
54 lines
1.5 KiB
Bash
# do nothing if fzf is not installed
|
|
(( ! $+commands[fzf] )) && return
|
|
|
|
# Bind for fzf history search
|
|
(( ! ${+ZSH_FZF_HISTORY_SEARCH_BIND} )) &&
|
|
typeset -g ZSH_FZF_HISTORY_SEARCH_BIND='^r'
|
|
|
|
# Args for fzf
|
|
(( ! ${+ZSH_FZF_HISTORY_SEARCH_FZF_ARGS} )) &&
|
|
typeset -g ZSH_FZF_HISTORY_SEARCH_FZF_ARGS='+s +m -x -e'
|
|
|
|
# Extra args for fzf
|
|
(( ! ${+ZSH_FZF_HISTORY_SEARCH_FZF_EXTRA_ARGS} )) &&
|
|
typeset -g ZSH_FZF_HISTORY_SEARCH_FZF_EXTRA_ARGS=''
|
|
|
|
# Cursor to end-of-line
|
|
(( ! ${+ZSH_FZF_HISTORY_SEARCH_END_OF_LINE} )) &&
|
|
typeset -g ZSH_FZF_HISTORY_SEARCH_END_OF_LINE=''
|
|
|
|
# Include event numbers
|
|
(( ! ${+ZSH_FZF_HISTORY_SEARCH_EVENT_NUMBERS} )) &&
|
|
typeset -g ZSH_FZF_HISTORY_SEARCH_EVENT_NUMBERS=1
|
|
|
|
fzf_history_search() {
|
|
setopt extendedglob
|
|
|
|
FC_ARGS="-li"
|
|
CANDIDATE_LEADING_FIELDS=4
|
|
|
|
if (( ! $ZSH_FZF_HISTORY_SEARCH_EVENT_NUMBERS )); then
|
|
FC_ARGS+=" -n"
|
|
CANDIDATE_LEADING_FIELDS=3
|
|
fi
|
|
|
|
candidates=(${(f)"$(fc ${=FC_ARGS} -1 0 | fzf ${=ZSH_FZF_HISTORY_SEARCH_FZF_ARGS} ${=ZSH_FZF_HISTORY_SEARCH_FZF_EXTRA_ARGS} -q "$BUFFER")"})
|
|
local ret=$?
|
|
if [ -n "$candidates" ]; then
|
|
BUFFER="${candidates[@]/(#m)*/${${(As: :)MATCH}[${CANDIDATE_LEADING_FIELDS},-1]}}"
|
|
BUFFER="${BUFFER[@]/(#b)(?)\\n/$match[1]
|
|
}"
|
|
zle vi-fetch-history -n $BUFFER
|
|
if [ -n "${ZSH_FZF_HISTORY_SEARCH_END_OF_LINE}" ]; then
|
|
zle end-of-line
|
|
fi
|
|
fi
|
|
zle reset-prompt
|
|
return $ret
|
|
}
|
|
|
|
autoload fzf_history_search
|
|
zle -N fzf_history_search
|
|
|
|
bindkey $ZSH_FZF_HISTORY_SEARCH_BIND fzf_history_search
|