Examples (completion) - junegunn/fzf GitHub Wiki
Custom completion API is experimental and subject to change
Writing custom fuzzy completion
See https://github.com/junegunn/fzf#custom-fuzzy-completion
[ZSH] Complete hg update/hg merge
If you need to add branch name completion for a subset of hg commands, e.g. hg up, hg merge, you can use technique as follows (zsh completion):
_fzf_complete_hg() {
ARGS="$@"
if [ $ARGS == 'hg merge'* ]] ](/junegunn/fzf/wiki/|-[[-$ARGS-==-'hg-up'*-); then
_fzf_complete --no-sort -- "$@" < <(
{ hg branches & hg tags }
)
else
eval "zle ${fzf_default_completion:-expand-or-complete}"
fi
}
_fzf_complete_hg_post() {
cut -f1 -d' '
}
[ZSH] Complete git co (for example)
You can use the same approach as above to complete any git command. In the example below, completion is triggered on git co (usual alias for git checkout):
_fzf_complete_git() {
ARGS="$@"
local branches
branches=$(git branch -vv --all)
if [ $ARGS == 'git co'* ](/junegunn/fzf/wiki/-$ARGS-==-'git-co'*-); then
_fzf_complete --reverse --multi -- "$@" < <(
echo $branches
)
else
eval "zle ${fzf_default_completion:-expand-or-complete}"
fi
}
_fzf_complete_git_post() {
awk '{print $1}'
}
[ZSH] pass
_fzf_complete_pass() {
_fzf_complete +m -- "$@" < <(
local prefix
prefix="${PASSWORD_STORE_DIR:-$HOME/.password-store}"
command find -L "$prefix" \
-name "*.gpg" -type f | \
sed -e "s#${prefix}/\{0,1\}##" -e 's#\.gpg##' -e 's#\\#\\\\#' | sort
)
}
[BASH] Custom trigger-less completion
If you want to remove the ** trigger just for certain completions, you can achieve this like so:
_fzf_complete_ssh_notrigger() {
FZF_COMPLETION_TRIGGER='' _fzf_host_completion
}
complete -o bashdefault -o default -F _fzf_complete_ssh_notrigger ssh
complete -o bashdefault -o default -F _fzf_complete_ssh_notrigger mosh
complete -o bashdefault -o default -F _fzf_complete_ssh_notrigger ss
[BASH] Use bfs instead of fd for more ergonomic results
Uses bfs to put shallow-depth paths closer to the top of results, while also leveraging bfs' superior performance over fd.
Based on: https://github.com/tavianator/bfs/discussions/119
See also: bfs vs fd vs find benchmark
FZF_DEFAULT_OPTS="$FZF_DEFAULT_OPTS --ansi"
FZF_CTRL_T_COMMAND="bfs -color -mindepth 1 -exclude \( -name .git \) -printf '%P\n' 2>/dev/null"
FZF_ALT_C_COMMAND="bfs -color -mindepth 1 -exclude \( -name .git \) -type d -printf '%P\n' 2>/dev/null"
_fzf_compgen_path() {
bfs -H "$1" -color -exclude \( -name .git \) 2>/dev/null
}
_fzf_compgen_dir() {
bfs -H "$1" -color -exclude \( -name .git \) -type d 2>/dev/null
}