# Author: James Cherti
# License: MIT
# Requirements: bash-completion
# Description: Perform tab-completion for aliases in Bash (bash-completion).
# URL: https://www.jamescherti.com/bash-shell-perform-tab-completion-for-aliases/
#
# Add the following function to ~/.bashrc :
alias_completion() {
local func_name='alias_completion'
if [[ $# -lt 2 ]]; then
echo "Usage: $func_name <cmd> <alias> <alias2> <...>" >&2
return 1
fi
local cmd; cmd="$1"
shift
# Load the completion
if ! type _completion_loader >/dev/null 2>&1; then
echo "Error: $func_name: '_completion_loader' was not found." >&2
return 1
fi
_completion_loader "$cmd"
if ! complete -p "$cmd" >/dev/null; then
echo "Error: $func_name: 'complete -p $cmd' failed." >&2
return 1
fi
# Add aliases
local alias
for alias in "$@"; do
complete_cmd=$(complete -p "$cmd" 2>/dev/null | sed -e 's/[[:space:]][^[:space:]]\+$//')
complete_cmd="${complete_cmd} $alias"
if ! ( echo "$complete_cmd" | grep -P '^\s*complete\s' >/dev/null 2>&1 ); then
echo "Error: $func_name: alias '$alias': '$complete_cmd' is an invalid command." >&2
return 1
fi
eval "$complete_cmd"
done
return 0
}
Code language: Bash (bash)
Examples of aliases:
alias s='ssh'
alias_completion ssh s
alias g='git'
alias_completion git g
Code language: Bash (bash)