【问题标题】:TextMate's Execute and Update ‘# =>’ Markers evaluates with ruby 1.8 instead of 1.9TextMate 的执行和更新‘# =>’标记使用 ruby​​ 1.8 而不是 1.9 进行评估
【发布时间】:2012-11-07 12:11:18
【问题描述】:

在 TextMate 2 中,Execute and Update '# =>' Markers 菜单操作会更新以下代码中的标记,就像我正在运行 ruby​​ 1.8 一样,即使我的 TM_RUBY 环境变量设置为 ~/.rvm/rubies/ruby- 1.9.3-p286/bin/ruby:

v = RUBY_VERSION # => "1.8.7"
puts "".singleton_class
puts v
# ~> -:2: undefined method `singleton_class' for "":String (NoMethodError)

另一方面,在 TextMate 2 中运行相同的代码会返回预期的命令输出:

#<Class:#<String:0x007fcf418941b8>>
1.9.3

这是一个很棒的功能,如果它仅限于 ruby​​ 1.8,那将是一个真正的耻辱。然而,我怀疑这可能是我的设置所特有的(我实际上已经看到它在这里与 1.9 代码一起工作:http://ruby-kickstart.com/)。执行和更新“# =>”标记菜单操作在 Ruby 包中定义,它从 rcodetools 调用 xmpfilter:

#!/usr/bin/env bash

[[ -f "${TM_SUPPORT_PATH}/lib/bash_init.sh" ]] && . "${TM_SUPPORT_PATH}/lib/bash_init.sh"

export RUBYLIB="$TM_BUNDLE_SUPPORT/vendor/rcodetools/lib${RUBYLIB:+:$RUBYLIB}"
export TM_RUBY=$(which "${TM_RUBY:-ruby}")

"${TM_RUBY}" -r "${TM_SUPPORT_PATH}/lib/ruby1.9/add_1.8_features.rb" -- "$TM_BUNDLE_SUPPORT/vendor/rcodetools/bin/xmpfilter"

文件 add_1.8_features.rb 仅向 String 和 File 类添加了一些遗留方法(例如 grep 和 remove)。事实上,这使它能够支持 ruby​​ 1.9(参见 https://github.com/textmate/ruby.tmbundle/blob/master/Support/vendor/rcodetools/CHANGES)。

在这一点上,我什至不太确定 ruby​​ 1.8 首先来自哪里。即使在上面的最后一行中传递最新 ruby​​ 的显式路径而不是 "${TM_RUBY}" 也不会改变输出。

如果有任何帮助可以让我在 TextMate 中使用此(或等效的)菜单操作,我将不胜感激。

【问题讨论】:

  • 您的TM_RUBY 环境变量默认设置为什么?
  • 我经常在它们之间切换(通过选中和取消选中变量)。在上面的示例中,您可以看到我将其设置为 Ruby 1.9.3 (~/.rvm/rubies/ruby-1.9.3-p286/bin/ruby),但我也经常使用 MacRuby (/usr/local/ bin/macruby,这是一个 ruby​​ 1.9.2)。
  • 啊,不清楚您的示例中使用的路径是什么。
  • 我已经相应地更新了我的问题。谢谢!
  • 这还有问题吗?我似乎无法重现这种行为。在运行文件和使用标记时,设置 TM_RUBY 都会给我正确的结果。我使用的是 rbenv 而不是 rvm,我觉得它更胜一筹。但这不应该对 Textmate 使用的 ruby​​ 二进制文件有任何影响。

标签: ruby textmate textmatebundles textmate2


【解决方案1】:

这是一个很好的参考。

http://cl.ly/23Ylhttp://cl.ly/23Yl/rvm_textmate.png

确保您正在运行所有新版本。

开箱即用,rvm 附带一个 ruby​​ 二进制文件,通常在 ~/.rvm/bin 中(或者,在系统范围的安装中,在 /usr/local/bin 中),它将在执行 ruby​​ 之前执行以下步骤:

Load up RVM
Look for any RVMRC files and load them
Execute as a normal ruby

这种方法可以在每个项目的基础上切换 ruby​​,而无需任何额外的工作。安装 rvm 后,这就是获取 rvm-auto-ruby 的完整路径的问题,可通过以下方式找到:

$ 哪个 rvm-auto-ruby

在 textmate 首选项的高级部分,添加或更改 TM_RUBY 变量以指向给定路径,如此屏幕截图中所示的示例安装。

来源:https://rvm.io/integration/textmate/

FWIW:Josh Cheek 很棒(rubykickstart)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-27
    • 1970-01-01
    • 2010-09-06
    相关资源
    最近更新 更多