如何在Vim中正确使用Ruby?如何在Vim中修改$PATH?

11

我在 Lion 上使用带有 Ruby 支持的 Vim(通过 gist 安装)。我正在使用 rbenv 来使用 Ruby,所以我的路径看起来像 /users/me/.rbenv/shims:.....

从 Vim 中查看路径:

:!echo $PATH
> usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/Users/fb/.rbenv/shims:....

我甚至可以创建和修改环境变量:

:let $PATH = "/bar:/foo"
:!echo $PATH
> /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/foo:/bar

路径始终以/usr/bin开头。

那么我如何访问位于~/.rbenv/shims的ruby 1.9.3,而不是位于/usr/bin的系统ruby?

7个回答

30

这是由苹果在OS X 10.5 Leopard中引入的已知问题

如果您正在使用Bash或Zsh,并且正在使用非交互式shell,则会受到影响。

运行sudo chmod ugo-x /usr/libexec/path_helper将修复您的问题,但您应该查看文章以了解原因。


3
这个解决方案完美地解决了问题。但我发现 tpope 的 vim-rbenv 提供的建议更好,因为它仍然可以在交互式 shell 中执行 path_helper。只需运行命令 sudo mv /etc/zshenv /etc/zshrc,vim 就会响应 Yay! - Tiago
1
这真的不能得到足够的赞。这是我第二次来这里,因为当设置环境时,任何人都如何记得他们需要做什么。 - Chris Nicola
当我运行这个命令时,我会收到“chmod:无法更改/usr/libexec/path_helper上的文件模式:操作不允许”的错误。有什么建议吗? - Zuhaib
@Zuhaib,你在使用sudo吗? - Edward Ocampo-Gooding
@EdwardOcampo-Gooding 我正在使用sudo,我也遇到了Zuhaib的问题。 - azureai

5
也有这个问题。如果zsh是你的默认shell,当它启动时,/etc/zshenv会被执行。 这将执行/usr/libexec/path_helper。它基于/etc/paths/etc/paths.d/的内容设置路径。 rvm的常见问题解答中提到将/etc/zshenv移动到/zsh/zshrc。我这样做了,它从macvim的路径开头删除了/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin

我修改了/etc/paths,这对我很有效。谢谢! 很高兴知道这个方法。 - duma

4

我没有在 .vimrc 中设置 shell 选项,因此它会自动设置为 /bin/zsh

然后我发现我在我的 .zshrc 文件中有一个重复的 rbenv 初始化。我从 .zshrc 中删除了初始化和 $PATH 扩展,因为这已经由 oh-my-zsh rbenv 插件处理了。

即使进行了清理,$PATH 的混乱仍然存在,所以运行 :!echo $PATH

/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/Users/fb/.rbenv/shims:/Users/fb/.rbenv/bin:/Users/fb/bin:/usr/local/sbin:/usr/games

设置 :set shell=/bin/bash 是帮助我的方法,因为我可以在我的 vim 中使用 bash: :!echo $PATH

/Users/fb/.rbenv/shims:/Users/fb/.rbenv/bin:/Users/fb/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/Users/fb/Dropbox/local/bash


2
在你的 ~/.bashrc(或者是你所使用的其他shell)文件中,添加以下行:
PATH=/home/me/.rbenv/shims:${PATH}

然后运行source ~/.bashrc(或者你使用的任何shell的.zshrc等!)


如果您将其放在~/.bash_profile中,则无需运行源命令(它将在每次启动新的shell时自动运行该命令)。 - Jwosty
真的 - 没想到那个。虽然你只需要在编辑/.bashrc时打开的每个shell中运行一次源命令。在我的脑海中,我正在从zsh翻译到bash - 我真的只是想告诉他把它放在他的/.zshrc中 :) - Paul Simpson
感谢您的回答。我使用zsh,没有.bashrc或.bash_profile文件。为了测试,我创建了它们,但是并没有起到帮助作用。我在终端和Iterm2中都正确设置了我的路径。 - fbehrens
1
在zsh中 echo $PATH >/Users/fb/.rbenv/shims:... 在vim:set shell? >shell=/bin/zsh, :echo $PATH >/Users/fb/.rbenv/shims:... 但是 :!echo $PATH >/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/Users/fb/.rbenv/shims:... 所以 :!ruby -v>ruby 1.8.7 (2010-01-10 patchlevel 249) [universal-darwin11.0] 而不是时髦的1.9.3,:( ???? - fbehrens
根据安装说明(https://github.com/sstephenson/rbenv#section_2),看起来你的路径中应该有<code>/home/me/.rbenv/bin</code>,而不是<code>/home/me/.rbenv/shims</code>。你也可以尝试使用rvm - 我在Lion上使用它没有任何问题(https://rvm.beginrescueend.com/)。 - Paul Simpson

1
我是一名有用的助手,可以为您翻译文本。

我不使用mac或zsh(我在linux上),但是当我从MATE菜单中运行gvim时遇到了这个问题。

我通过将以下内容添加到我的.vimrc文件中解决了它:

if $PATH !~ "\.rbenv"
    let $PATH="/home/username/.rbenv/shims:/home/username/.rbenv/bin:" . $PATH
endif

这样做可以避免在从终端运行vim时设置它,否则rbenv路径会被包含两次。
我尝试将应用程序设置为通过终端运行,但没有帮助。

1

这个问题可以通过添加来解决。

PATH=/home/me/.rbenv/shims:${PATH}

/etc/zshenv

0

在 OS X 上,打开新的控制台窗口时会调用 bash_profile 文件,而在 Linux 上则是调用 bashrc 文件。


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