NVM 不坚持使用 ZSH 的默认别名 (oh-my-zsh)

NVM doesn't stick to alias default with ZSH (oh-my-zsh)

我已经安装了 NVM,然后我发现了 oh-my-zsh 并安装了它。它似乎有一个 nvm 插件,我在 .zshrc 中启用了它。

我也把它放在我的 .zprofile 中

export NVM_DIR="/Users/me/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"  # This loads nvm

现在我可以使用 nvm,但是每当我将 alias default 设置为不同的版本时,nvm 会在我下次打开 shell 时切换回来。

$ iojs -v
v1.2.0
$ which iojs
/Users/me/.nvm/versions/io.js/v1.2.0/bin/iojs
$ nvm use 1.5.1
Now using io.js v1.5.1
$ nvm alias default iojs v1.5.1
default -> iojs (-> iojs-v1.5.1)
$ which iojs
/Users/me/.nvm/versions/io.js/v1.5.1/bin/iojs

然后打开一个新的shell后:

$ which iojs
/Users/me/.nvm/versions/io.js/v1.2.0/bin/iojs

我的旧 bash 安装会不会把事情搞砸了?我在 OSX 顺便说一句,但我想这没什么区别。

------------编辑------ 根据要求提供更多输出

➜  ~  nvm version
iojs-v1.2.0
➜  ~  ls $NVM_DIR/alias
default
➜  ~  cat $NVM_DIR/alias/default
iojs
➜  ~  nvm alias iojs
iojs -> iojs-v1.5 (-> iojs-v1.5.1) (default)
➜  ~  nvm alias $(cat $NVM_DIR/alias/default)
iojs -> iojs-v1.5 (-> iojs-v1.5.1) (default)

我刚刚发现它为什么要恢复到 1.2.0 我想。在安装 oh-my-zsh 的过程中,它似乎从我的 Bash shell 中获取了活动路径并将其复制到 .zshrc 文件,包括当时的活动 nvm 路径:

/Users/me/.nvm/versions/io.js/v1.2.0/bin

但是从 PATH 中删除它后,现在我的 zsh 在启动新 shell 后找不到任何 Node 二进制文件。所以问题仍然是我的疑问,为什么不记住 NVM 设置?我仍然可以像以前一样在活动 shell 中设置它,它只是不粘。

我现在认为我的 oh-my-zsh 安装可能存在根本性的错误。例如,我在 zshrc 中启用了 git 插件,但命令 "gst" 不是有效的别名。

plugins=(git, gitflow, nvm, brew, tmux)

➜  ~  gst
zsh: command not found: gst

我现在可以使用了。重新安装了 oh-my-zsh。

我不确定发生了什么变化。看来我确实需要启用 nvm 插件才能正常工作。

在没有插件的情况下,我尝试将 nvm 启动命令放入 .zprofile

export NVM_DIR="/Users/me/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"  # This loads nvm

尽管文件在创建新 shell 时加载,但它似乎没有正确启用 NVM。

我还注意到,如果我在 .zshrc 中的 zsh 插件配置中犯了错误,则没有错误,插件根本无法工作。所以我想这是要小心的事情。例如,我不小心使用了逗号,然后插件在没有警告的情况下中断:

plugins=(git, gitflow, nvm)

当我添加到 ~/.zprofile

时,这对我有用
export NVM_DIR=~/.nvm
source $(brew --prefix nvm)/nvm.sh

将下面添加到 .zshrc

的末尾
export NVM_DIR=~/.nvm
source $(brew --prefix nvm)/nvm.sh

请注意,一定要在最后,我不知道为什么

我正在使用 OSX 10.11.6 与 Hyper 和 Oh My Zsh。我不得不卸载通过 homebrew 安装的 nvm,通过 curl 命令重新安装它,然后将此行添加到最底部以使其正常工作。我确信这对我的所有 plugins/setting/blah 来说都是一样的,但这就是它对我有用的原因:

source "$NVM_DIR/nvm.sh"

在我的 ~/.zshrc 文件的最后

如果你的 ~/.zshrc 文件中有这一行

export PATH="/usr/local/opt/node@8/bin:$PATH"

删除该行或在文件中注释掉。

正如 brew 在安装 nvm 时所说的那样,"Add the following to ~/.bash_profile or your desired shell configuration file:"

export NVM_DIR="$HOME/.nvm"
[ -s "$(brew --prefix)/opt/nvm/nvm.sh" ] && . "$(brew --prefix)/opt/nvm/nvm.sh" # This loads nvm
[ -s "$(brew --prefix)/opt/nvm/etc/bash_completion" ] && . "$(brew --prefix)/opt/nvm/etc/bash_completion" # This loads nvm bash_completion

即使 .zprofile 等同于 .bash_profile,出于某种原因,如果您将这些行添加到 .zprofile,则别名将被忽略。所以将它们添加到 .zshrc 中。

请参阅 https://formulae.brew.sh/formula/nvm,其中包含这些行的最新版本。

如果这不起作用......有些人似乎成功地向他们的 PATH 添加了一些东西:https://github.com/nvm-sh/nvm/issues/1703#issuecomment-356221842

与Linux (Ubuntu 20.04)

用你最喜欢的编辑器编辑 ~/.zshrc

nano ~/.zshrc

在文件末尾添加:

# NVM
export NVM_DIR=~/.nvm
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"

然后你运行:

source ~/.zshrc

正如其他用户所说,将此添加到我的 ~/.zshrc 文件中解决了问题。

# NVM Stuff
export NVM_DIR=~/.nvm
source $NVM_DIR/nvm.sh

只是想强调一下,直到我将它放在接近文件末尾时它才起作用。可能中间的某些东西弄乱了配置,我的 nvm 为每个文件夹使用了单独的上下文。

放在最后帮我解决了问题