diff --git a/contrib/nvim.bash b/contrib/nvim.bash new file mode 100644 index 0000000000..024c3288a2 --- /dev/null +++ b/contrib/nvim.bash @@ -0,0 +1,105 @@ +#!/usr/bin/env bash + +# Provides bash completion for "nvim". + +if [[ -n ${BASH_COMPLETION_VERSINFO[*]} ]] \ + && ((BASH_COMPLETION_VERSINFO[0] > 2 || (\ + BASH_COMPLETION_VERSINFO[0] == 2 && BASH_COMPLETION_VERSINFO[1] >= 12))); then + # use bash-completion >= 2.12 + _comp_nvim() { + local cur prev words cword + _comp_initialize -n : -- "$@" || return + + case "$prev" in + --listen | --server) + _comp_compgen_filedir + + if [[ "$cur" != /* ]]; then + _comp_compgen_ip_addresses -a + compopt -o nospace + fi + + return + ;; + esac + + if [[ "$cur" =~ ^- ]]; then + # Infers args from "nvim --help". + _comp_compgen_help + _comp_compgen -a -- -W "-c -Es -v -h" + + if [[ ${#COMPREPLY[@]} -eq 1 ]]; then + case "${COMPREPLY-}" in + -o | -O | -p | -V) + compopt -o nospace + ;; + esac + fi + return + fi + + _comp_compgen_filedir + } \ + && complete -F _comp_nvim nvim +else + _comp_nvim() { + local cur prev opts + COMPREPLY=() + cur="${COMP_WORDS[COMP_CWORD]}" + prev="${COMP_WORDS[COMP_CWORD - 1]}" + + opts=" + --cmd + -c + -l + -S + -s + -u + -d + -es -Es + -h --help + -i + -n + -o + -O + -p + -R + -v --version + -V + -- + --api-info + --clean + --embed + --headless + --listen + --remote + --server + --startuptime + " + + if [[ "$cur" =~ ^- ]]; then + # shellcheck disable=SC2207 + COMPREPLY=($(compgen -W "$opts" -- "$cur")) + + if [[ ${#COMPREPLY[@]} -eq 1 ]]; then + case "${COMPREPLY-}" in + -o | -O | -p | -V) + compopt -o nospace + ;; + esac + fi + return + fi + + compopt -o default -o bashdefault + } \ + && complete -F _comp_nvim nvim +fi + +# aliases are not expanded by default during completion. +for cmd in vi vim; do + [[ "$(alias $cmd 2> /dev/null)" == "alias $cmd='nvim'" ]] \ + && type -f _comp_nvim > /dev/null 2>&1 \ + && ! complete -p $cmd > /dev/null 2>&1 \ + && complete -F _comp_nvim $cmd +done