【发布时间】: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