如何通过MacVim(!ruby)执行时运行正确版本的Ruby

Rya*_*yan 8 ruby vim macvim rvm

最近我看到Gary Bernhardt展示了他用来从vim中执行Ruby代码的vim快捷方式.捷径是

:map ,t :w\|:!ruby %<cr>.  
Run Code Online (Sandbox Code Playgroud)

似乎这个方法总是执行系统Ruby,在我的例子中是1.8.7.我对升级它犹豫不决,因为我听说更改System Ruby解释器会导致一些不稳定的问题.反正有没有让这个命令使用RVM目录的版本设置?

Chr*_*sen 5

指定a的最直接方法ruby是在:!命令中给出其完整路径名(而不是依赖于ruby在PATH目录中首先找到的那个):

所以你的map命令最终会像这样:

:map ,t :w\|:!~/.rvm/bin/ruby-1.9.2-head@rails3-dev %<cr>
Run Code Online (Sandbox Code Playgroud)

通常也可以调整PATH环境变量的有效值,以便ruby找到您想要的第一个,但它可能并不总是您想要的那么简单.具体来说,:!命令由shell Vim选项配置的shell处理(:set shell?以查看其值).该shell的配置文件可能会修改Vim为shell提供的PATH值(将Vim的PATH(:echo $PATH)与:!命令最终使用(:!echo $PATH)的PATH进行比较,以查看shell的配置文件是否可能正在调整PATH.

您可以尝试修改Vim及其子代使用的PATH,如下所示:

:let $PATH = $HOME . '/.rvm/wrappers/ruby-1.9.2-head@rails3-dev:' . $PATH
Run Code Online (Sandbox Code Playgroud)

您应该检查有效的PATH :!echo $PATH:!which ruby查找您的shell是否正在进一步修改PATH(可能:set shell=/bin/sh是您遇到此问题).

注意:我从未见过RVM的包装目录的这种特殊用法,未来的RVM版本可能会破坏它.正常的用法是创建一个包装器并直接调用它~/.rvm/bin(类似于这篇文章的第一部分),而不是放入~/.rvm/wrapper/whateverPATH.