【问题标题】:How to run the proper version of Ruby when executing through MacVim (!ruby)通过 MacVim (!ruby) 执行时如何运行正确版本的 Ruby
【发布时间】:2011-08-05 08:12:40
【问题描述】:

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

:map ,t :w\|:!ruby %<cr>.  

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

【问题讨论】:

  • 那个点是故意的(在&lt;cr&gt;之后)?
  • 不,那只是出于习惯。

标签: ruby vim rvm macvim


【解决方案1】:

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

  • /path/to/your/preferred/ruby使用Ruby:

    :!/path/to/your/preferred/ruby %
    
  • 使用 RVM 安装的ruby-1.9.2-head:

    :!~/.rvm/bin/ruby-1.9.2-head %
    
  • 要将 RVM 安装的 ruby-1.9.2-head 与您的 rails3-dev gemset 一起使用:

    :!~/.rvm/bin/ruby-1.9.2-head@rails3-dev %
    

所以你的地图命令可能会像这样结束:

:map ,t :w\|:!~/.rvm/bin/ruby-1.9.2-head@rails3-dev %<cr>

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

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

:let $PATH = $HOME . '/.rvm/wrappers/ruby-1.9.2-head@rails3-dev:' . $PATH

您应该使用:!echo $PATH:!which ruby 检查有效的PATH,以了解您的shell 是否进一步修改了PATH(如果您有这个问题,可能是:set shell=/bin/sh)。

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

【讨论】:

  • 谢谢,这篇文章很有帮助。一个问题,如果我要更改 PATH 以便首先使用 Ruby 的 RVM 版本,这会影响操作系统寻找它所期望的版本吗?换句话说,假设操作系统会指定它期望的 Ruby 路径,而不是仅仅发出“ruby”命令本身并取回 PATH 中定义的任何内容,是否安全?
  • 它不太可能影响“系统”对 Ruby 的任何使用,但有可能(在有限的范围内)。最多,它只会影响以修改后的 PATH 启动并且以#!/usr/bin/env ruby 作为第一行,或者以ruby /path/to/program 调用的“系统”Ruby 程序(对于任何对 Ruby 安装敏感的程序来说,这可能是一个错误)用过的)。 PATH 和任何环境变量一样,是从父进程继承的,所以在你的 Vim 实例中更改 PATH 只会影响它的子进程(即不是由 launchdinit 启动的进程、inetdcron 等)。
【解决方案2】:

在您的地图中,不要简单地使用 ruby(这将是您的 $PATH 中的第一个),而是使用完整路径。例如,假设您想使用安装了 Ruby 的 MacPorts:

:map ,t :w\|:!/opt/local/ruby %<cr>.

【讨论】:

    猜你喜欢
    • 2014-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 2021-02-17
    • 2013-07-23
    • 1970-01-01
    • 2013-03-12
    相关资源
    最近更新 更多