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 为每个文件夹使用了单独的上下文。
放在最后帮我解决了问题
我已经安装了 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 为每个文件夹使用了单独的上下文。
放在最后帮我解决了问题