diff --git a/zsh-nvm.plugin.zsh b/zsh-nvm.plugin.zsh index 226bd96..d85e94c 100644 --- a/zsh-nvm.plugin.zsh +++ b/zsh-nvm.plugin.zsh @@ -22,6 +22,20 @@ _zsh_nvm_install() { $(builtin cd "$NVM_DIR" && git checkout --quiet "$(_zsh_nvm_latest_release_tag)") } +_zsh_nvm_global_binaries() { + + # Look for global binaries + local global_binary_paths="$(echo "$NVM_DIR"/v0*/bin/*(N) "$NVM_DIR"/versions/*/*/bin/*(N))" + + # If we have some, format them + if [[ -n "$global_binary_paths" ]]; then + echo "$NVM_DIR"/v0*/bin/*(N) "$NVM_DIR"/versions/*/*/bin/*(N) | + xargs -n 1 basename | + sort | + uniq + fi +} + _zsh_nvm_load() { # Source nvm (check if `nvm use` should be ran after load) @@ -71,7 +85,7 @@ _zsh_nvm_lazy_load() { if [[ "$NVM_NO_USE" == true ]]; then global_binaries=() else - global_binaries=("$NVM_DIR"/v0*/bin/*(N:t) "$NVM_DIR"/versions/*/*/bin/*(N:t)) + global_binaries=($(_zsh_nvm_global_binaries)) fi # Add yarn lazy loader if it's been installed by something other than npm @@ -81,22 +95,19 @@ _zsh_nvm_lazy_load() { global_binaries+=('nvm') global_binaries+=($NVM_LAZY_LOAD_EXTRA_COMMANDS) - # Deduplicate - typeset -U global_binaries - # Remove any binaries that conflict with current aliases local cmds - IFS=$'\n' cmds=($(whence -w -- "${global_binaries[@]}" 2> /dev/null)) - unset IFS - cmds=(${cmds#*": alias"}) - cmds=(${(@q-)cmds%": "*}) + cmds=() + for bin in $global_binaries; do + [[ "$(which $bin 2> /dev/null)" = "$bin: aliased to "* ]] || cmds+=($bin) + done # Create function for each command for cmd in $cmds; do # When called, unset all lazy loaders, load nvm then run current command eval "$cmd(){ - unset -f ${cmds[@]} > /dev/null 2>&1 + unset -f $cmds > /dev/null 2>&1 _zsh_nvm_load $cmd \"\$@\" }"