TextMate的执行和更新'#=>'标记使用ruby 1.8而不是1.9进行评估

时间:2012-11-07 12:11:19

标签: ruby textmate textmatebundles textmate2

在TextMate 2中,执行和更新'#=>'标记菜单操作更新以下代码中的标记,就好像我正在运行ruby 1.8,即使我的TM_RUBY环境变量设置为〜/ .rvm / rubies / ruby -1.9.3-P286 /斌/红宝石:

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

这是一个很棒的功能,如果它仅限于红宝石1.8那将是一个真正的耻辱。但是,我怀疑这可能是我的设置所特有的(我实际上已经看到它在这里使用1.9代码:http://ruby-kickstart.com/)。执行和更新'#=&gt;'标记菜单操作在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中使用此(或等效的)菜单操作,我将非常感激。

1 个答案:

答案 0 :(得分: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)