diff --git a/README.md b/README.md index 23e4069..5d28180 100644 --- a/README.md +++ b/README.md @@ -47,6 +47,7 @@ Zgenom will automatically clone the plugin repositories for you when you do a `z | `ZSH_FZF_HISTORY_SEARCH_BIND` | `'^r'` | Keybind to trigger fzf reverse search | | `ZSH_FZF_HISTORY_SEARCH_FZF_ARGS` | `'+s +m -x -e --preview-window=hidden'` | Arguments for `fzf` (might be updated, not recommended to override) | | `ZSH_FZF_HISTORY_SEARCH_FZF_EXTRA_ARGS` | `''` | Extra arguments for `fzf` | +| `ZSH_FZF_HISTORY_SEARCH_FZF_QUERY_PREFIX` | `''` | Query prefix for `fzf` when $BUFFER is not empty. Set it to '^' to query history lines begin with $BUFFER | | `ZSH_FZF_HISTORY_SEARCH_END_OF_LINE` | `''` | Put the cursor on at the end of the line after completion, `empty=false` | | `ZSH_FZF_HISTORY_SEARCH_EVENT_NUMBERS` | `1` | Include event numbers in search. Set to 0 to remove event numbers from the search. | | `ZSH_FZF_HISTORY_SEARCH_DATES_IN_SEARCH` | `1` | Include ISO8601 timestamps in search. Set to 0 to remove them from the search. | diff --git a/zsh-fzf-history-search.zsh b/zsh-fzf-history-search.zsh index b8f3310..a2ac16d 100644 --- a/zsh-fzf-history-search.zsh +++ b/zsh-fzf-history-search.zsh @@ -29,6 +29,10 @@ typeset -g ZSH_FZF_HISTORY_SEARCH_DATES_IN_SEARCH=1 (( ! ${+ZSH_FZF_HISTORY_SEARCH_REMOVE_DUPLICATES} )) && typeset -g ZSH_FZF_HISTORY_SEARCH_REMOVE_DUPLICATES='' +# Define fzf query, when $BUFFER is not empty +(( ! ${+ZSH_FZF_HISTORY_SEARCH_FZF_QUERY_PREFIX} )) && +typeset -g ZSH_FZF_HISTORY_SEARCH_FZF_QUERY_PREFIX='' + fzf_history_search() { setopt extendedglob @@ -56,13 +60,17 @@ fzf_history_search() { fi fi - candidates=(${(f)"$(eval $history_cmd | fzf ${=ZSH_FZF_HISTORY_SEARCH_FZF_ARGS} ${=ZSH_FZF_HISTORY_SEARCH_FZF_EXTRA_ARGS} -q "$BUFFER")"}) + if (( $#BUFFER )); then + candidates=(${(f)"$(eval $history_cmd | fzf ${=ZSH_FZF_HISTORY_SEARCH_FZF_ARGS} ${=ZSH_FZF_HISTORY_SEARCH_FZF_EXTRA_ARGS} -q "${=ZSH_FZF_HISTORY_SEARCH_FZF_QUERY_PREFIX}$BUFFER")"}) + else + candidates=(${(f)"$(eval $history_cmd | fzf ${=ZSH_FZF_HISTORY_SEARCH_FZF_ARGS} ${=ZSH_FZF_HISTORY_SEARCH_FZF_EXTRA_ARGS})"}) + fi local ret=$? if [ -n "$candidates" ]; then if (( $CANDIDATE_LEADING_FIELDS != 1 )); then BUFFER="${candidates[@]/(#m)[0-9 \-\:]##/${${(As: :)MATCH}[${CANDIDATE_LEADING_FIELDS},-1]}}" else - BUFFER="${candidates[@]}" + BUFFER="${(j| && |)candidates}" fi BUFFER=$(printf "${BUFFER[@]//\\\\n/\\\\\\n}") zle vi-fetch-history -n $BUFFER