Zsh和RVM的问题(rvm-prompt无法解析)

15

最近我换成了Zsh,自然而然地使用了Oh My Zsh进行配置,因为我是新手。所以有几个主题包含了rvm-prompt,这就是我的问题所在。每次加载Zsh时,我必须执行rvm reload,否则rvm-prompt无法解析(zsh: command not found: rvm-prompt)。请注意,重新加载后它会正常解析。同时,当我进入一个具有自己的.rvmrc(其他gemset)的目录,然后再退出它时,也会出现同样的问题;我不得不再次重新加载Zsh。

我已经将RVM设置在$PATH中。

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"

在我的.zshrc文件中:

我正在使用RVM插件。有人知道怎么回事吗?这不是什么严重问题,只是有点烦人。

6个回答

21

创建一个到rvm-prompt的别名。这是最可靠的答案。按照以下顺序在您的.zshrc文件中安排内容:

  1. alias rvm-prompt=$HOME/.rvm/bin/rvm-prompt
  2. source $ZSH/oh-my-zsh.sh
  3. [[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm"

如果oh-my-zsh(OMZ)在RVM之前加载,which rvm-prompt将会悄无声息地失败,因此即使之后在路径中找到了它,您的提示符(如果受您的主题支持)也不会显示RVM。

如果RVM在OMZ之前加载,则可能会出现zsh: command not found: rvm-prompt的情况。

将rvm-prompt设置别名为其实际位置似乎可以解决问题,无论RVM和OMZ的加载顺序如何。我仍然建议将RVM放在底部。

如上所述,在.zshenv中加载RVM会导致iTerm 2中加载两次RVM(不,它仍然不在我的.zshrc中),并且即使rvm-promptrvm current显示了特定的ruby版本和gemset,提示符也会显示“system”。


1
好发现,jasongarber。看起来最新的rvm试图将~/.rvm/bin添加到路径中以执行此操作,但这发生得太晚了。根据你的提示,我将sourcing移到文件底部。https://gist.github.com/1973583 - Mat Schaffer
非常好的发现!你的方法没有使用别名也能很好地工作。 - jasongarber
我的rvm-prompt没有返回任何内容,但是rvm current似乎工作正常。 - alexzg
这个对我有效。 export RVM_HOME=/usr/local/rvm && PATH=$PATH:$RVM_HOME/bin - Nick

19

我曾经遇到同样的问题,直到我把 [[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" 添加到 .zshenv 文件中而不是 .zshrc 文件中。


1
这导致我在提示符的rvm部分看到了‹system›,即使rvm current报告不是这样。更好的解决方案是使用别名,如下所述。 - jasongarber

7
最简单的方法是安装RVM(Ruby虚拟管理器),这样你会真正喜欢这个主题。
curl -sSL https://get.rvm.io | bash

问题在此后自行解决。

4

我不确定这个方法是否能解决你的问题,但是无论如何都值得一试。

最近更新rvm之后,我在使用oh-my-zsh时也遇到了类似的问题。我先卸载了rvm和oh-my-zsh,然后重新安装(需要先安装oh-my-zsh,因为如果你先安装rvm,它会将很多路径复制到你的~/.zshrc文件中)。

事情有所改善,但rvm-prompt在新的终端窗口下无法正常工作。我最终在~/.zshrc文件的结尾处添加了以下内容,现在一切正常:

rvm use default

我认为最近版本的rvm和oh-my-zsh的加载顺序存在某种鸡生蛋问题。不确定哪一个有问题,但我希望它们中的一个或两个都能解决这个问题!


最好的方法是按照@johnernaut的建议将其移动到.zshenv - mpapis

1

这个问题实际上在 rvm 的 zsh-FAQ 中有解答。

http://beginrescueend.com/integration/zsh/

__rvm_project_rvmrc添加到您的.zshrc中可以解决此问题。
我将其作为答案添加,因为我在谷歌搜索问题时刚刚发现了这个解决方案,上面的解决方案只是将Ruby版本设置为rvm的默认版本,并不能与gemsets一起使用。

3
这对我不起作用。根据上面的答案使用.zshenv可以解决问题。 - nmott

-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接