diff --git a/shell/key-bindings.zsh b/shell/key-bindings.zsh index b64f7916fc7..8a77047c401 100644 --- a/shell/key-bindings.zsh +++ b/shell/key-bindings.zsh @@ -98,13 +98,15 @@ bindkey -M viins '\ec' fzf-cd-widget fzf-history-widget() { local selected num setopt localoptions noglobsubst noposixbuiltins pipefail no_aliases 2> /dev/null - selected=( $(fc -rl 1 | awk '{ cmd=$0; sub(/^[ \t]*[0-9]+\**[ \t]+/, "", cmd); if (!seen[cmd]++) print $0 }' | - FZF_DEFAULT_OPTS="--height ${FZF_TMUX_HEIGHT:-40%} ${FZF_DEFAULT_OPTS-} -n2..,.. --scheme=history --bind=ctrl-r:toggle-sort,ctrl-z:ignore ${FZF_CTRL_R_OPTS-} --query=${(qqq)LBUFFER} +m" $(__fzfcmd)) ) + selected="$(fc -rl 1 | awk '{ cmd=$0; sub(/^[ \t]*[0-9]+\**[ \t]+/, "", cmd); if (!seen[cmd]++) print $0 }' | + FZF_DEFAULT_OPTS="--height ${FZF_TMUX_HEIGHT:-40%} ${FZF_DEFAULT_OPTS-} -n2..,.. --scheme=history --bind=ctrl-r:toggle-sort,ctrl-z:ignore ${FZF_CTRL_R_OPTS-} --query=${(qqq)LBUFFER} +m" $(__fzfcmd))" local ret=$? if [ -n "$selected" ]; then - num=$selected[1] - if [ -n "$num" ]; then + num=$(awk '{print $1}' <<< "$selected") + if [[ "$num" =~ ^[1-9][0-9]*$ ]]; then zle vi-fetch-history -n $num + else # selected is a custom query, not from history + LBUFFER="$selected" fi fi zle reset-prompt