mirror of
				https://github.com/nvm-sh/nvm.git
				synced 2025-11-03 22:47:13 +00:00 
			
		
		
		
	Fixes issue 199 where the bash completion was not working in ZSH because the builtin bash command `complete` was not found. The fix executes the `bashcompinit` command which creates the `complete` function for the Z shell.
		
			
				
	
	
		
			90 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			90 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
#!/usr/bin/env bash
 | 
						|
 | 
						|
# bash completion for Node Version Manager (NVM)
 | 
						|
 | 
						|
__nvm_generate_completion()
 | 
						|
{
 | 
						|
  declare current_word
 | 
						|
  current_word="${COMP_WORDS[COMP_CWORD]}"
 | 
						|
  COMPREPLY=($(compgen -W "$1" -- "$current_word"))
 | 
						|
  return 0
 | 
						|
}
 | 
						|
 | 
						|
__nvm_commands ()
 | 
						|
{
 | 
						|
  declare current_word
 | 
						|
  declare command
 | 
						|
 | 
						|
  current_word="${COMP_WORDS[COMP_CWORD]}"
 | 
						|
 | 
						|
  COMMANDS='\
 | 
						|
    help install uninstall use run\
 | 
						|
    ls ls-remote list list-remote deactivate\
 | 
						|
    alias unalias copy-packages clear-cache version'
 | 
						|
 | 
						|
    if [ ${#COMP_WORDS[@]} == 4 ]; then
 | 
						|
 | 
						|
      command="${COMP_WORDS[COMP_CWORD-2]}"
 | 
						|
      case "${command}" in
 | 
						|
      alias)  __nvm_installed_nodes ;;
 | 
						|
      esac
 | 
						|
 | 
						|
    else
 | 
						|
 | 
						|
      case "${current_word}" in
 | 
						|
      -*)     __nvm_options ;;
 | 
						|
      *)      __nvm_generate_completion "$COMMANDS" ;;
 | 
						|
      esac
 | 
						|
 | 
						|
    fi
 | 
						|
}
 | 
						|
 | 
						|
__nvm_options ()
 | 
						|
{
 | 
						|
  OPTIONS=''
 | 
						|
  __nvm_generate_completion "$OPTIONS"
 | 
						|
}
 | 
						|
 | 
						|
__nvm_installed_nodes ()
 | 
						|
{
 | 
						|
  __nvm_generate_completion "$(nvm_ls) $(__nvm_aliases)"
 | 
						|
}
 | 
						|
 | 
						|
__nvm_aliases ()
 | 
						|
{
 | 
						|
  declare aliases
 | 
						|
  aliases=""
 | 
						|
  if [ -d $NVM_DIR/alias ]; then
 | 
						|
    aliases="`cd $NVM_DIR/alias && ls`"
 | 
						|
  fi
 | 
						|
  echo "${aliases}"
 | 
						|
}
 | 
						|
 | 
						|
__nvm_alias ()
 | 
						|
{
 | 
						|
  __nvm_generate_completion "$(__nvm_aliases)"
 | 
						|
}
 | 
						|
 | 
						|
__nvm ()
 | 
						|
{
 | 
						|
  declare previous_word
 | 
						|
  previous_word="${COMP_WORDS[COMP_CWORD-1]}"
 | 
						|
 | 
						|
  case "$previous_word" in
 | 
						|
  use|run|ls|list|uninstall) __nvm_installed_nodes ;;
 | 
						|
  alias|unalias)  __nvm_alias ;;
 | 
						|
  *)              __nvm_commands ;;
 | 
						|
  esac
 | 
						|
 | 
						|
  return 0
 | 
						|
}
 | 
						|
 | 
						|
# complete is a bash builtin, but recent versions of ZSH come with a function 
 | 
						|
# called bashcompinit that will create a complete in ZSH. If the user is in 
 | 
						|
# ZSH, load and run bashcompinit before calling the complete function.
 | 
						|
if [[ -n ${ZSH_VERSION-} ]]; then
 | 
						|
	autoload -U +X bashcompinit && bashcompinit
 | 
						|
fi
 | 
						|
 | 
						|
complete -o default -o nospace -F __nvm nvm
 |