4

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

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/ )。Execute and Update '# =>' Markers 菜单操作在 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 中使用此(或等效)菜单操作的帮助。

4

1 回答 1

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 的完整路径的问题,可通过以下方式找到:

$ which rvm-auto-ruby

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

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

FWIW:Josh Cheek 很棒(rubykickstart)

于 2013-01-16T14:01:45.213 回答