nvm: use nvm current in nvm_prompt_info and look in alternate install locations

This makes it work regardless of where nvm is loaded from. And it uses nvm's
version strings, which distinguish the "system" and "none" NVM environments,
instead of reporting the specific version of the system node.js or erroring,
respectively.

Fixes #4336
Closes #4338
This commit is contained in:
Andrew Janke 2015-09-10 04:10:18 -04:00 committed by Marc Cornellà
parent fc6c9ca4b4
commit ef44416df2
2 changed files with 46 additions and 25 deletions

View file

@ -1,9 +1,8 @@
# get the node.js version # get the nvm-controlled node.js version
function nvm_prompt_info() { function nvm_prompt_info() {
[[ -f "$NVM_DIR/nvm.sh" ]] || return
local nvm_prompt local nvm_prompt
nvm_prompt=$(node -v 2>/dev/null) which nvm &>/dev/null || return
[[ "${nvm_prompt}x" == "x" ]] && return nvm_prompt=$(nvm current)
nvm_prompt=${nvm_prompt:1} nvm_prompt=${nvm_prompt#v}
echo "${ZSH_THEME_NVM_PROMPT_PREFIX}${nvm_prompt}${ZSH_THEME_NVM_PROMPT_SUFFIX}" echo "${ZSH_THEME_NVM_PROMPT_PREFIX}${nvm_prompt}${ZSH_THEME_NVM_PROMPT_SUFFIX}"
} }

View file

@ -1,23 +1,45 @@
# Set NVM_DIR if it isn't already defined # nvm
[[ -z "$NVM_DIR" ]] && export NVM_DIR="$HOME/.nvm" #
# This plugin locates and loads nvm, looking for it in well-known locations.
# Don't try to load nvm if command already available () {
type "nvm" &> /dev/null && return emulate -L zsh
local nvm_install_dir="" dir install_locations
if [[ -n $NVM_INSTALL_DIR ]]; then
# User-specified path
nvm_install_dir=$NVM_INSTALL_DIR
else
# Well-known common installation locations for NVM
install_locations=( ~/.nvm )
[[ -n $NVM_DIR ]] && install_locations=($NVM_DIR $install_locations)
# Mac Homebrew sticks
which brew &>/dev/null && install_locations+=$(brew --prefix nvm)
for dir ($install_locations); do
if [[ -s $dir/nvm.sh ]]; then
nvm_install_dir=$dir
break
fi
done
fi
# Load nvm if it exists in $NVM_DIR if [[ -n $nvm_install_dir ]]; then
if [[ -f "$NVM_DIR/nvm.sh" ]]; then source $nvm_install_dir/nvm.sh
source "$NVM_DIR/nvm.sh" else
return # No NVM installation found
fi return 0
fi
# Otherwise try to load nvm installed via Homebrew # Locate and use the completion file shipped with NVM, instead of this
# plugin's completion
# User can set this if they have an unusual Homebrew setup # (Their bash completion file has zsh portability support)
NVM_HOMEBREW="${NVM_HOMEBREW:-/usr/local/opt/nvm}" if [[ $ZSH_NVM_BUNDLED_COMPLETION == true ]]; then
# Load nvm from Homebrew location if it exists local bash_comp_file
[[ -f "$NVM_HOMEBREW/nvm.sh" ]] && source "$NVM_HOMEBREW/nvm.sh" # Homebrew relocates the bash completion file, so look multiple places
# Load nvm bash completion from Homebrew if it exists for bash_comp_file ( bash_completion etc/bash_completion.d/nvm ); do
if [[ -f "$NVM_HOMEBREW/etc/bash_completion.d/nvm" ]]; then if [[ -s $nvm_install_dir/$bash_comp_file ]]; then
autoload -U +X bashcompinit && bashcompinit source $nvm_install_dir/$bash_comp_file
source "$NVM_HOMEBREW/etc/bash_completion.d/nvm" break;
fi fi
done
fi
}