在 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 中使用此(或等效)菜单操作的帮助。