Files
zsh-fzf-history-search/zsh-fzf-history-search.zsh
Javi Merino 754d074027 Add an option to remove event numbers from search
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.
2022-05-09 07:21:59 +01:00

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