SublimeText2 RubyTest"验证Ruby语法"触发UTF-8错误

jla*_*ieu 2 ruby utf-8 ruby-test sublimetext2

我在Mac OS 10.7.5上使用rvm和ruby 1.9.3.

我希望能够使用Sublime Text 2 RubyTest包来验证我的Ruby语法.

但是,当我尝试Tools -> RubyTest -> Verify Ruby Syntax在任何ruby文件(test.rb下面)上运行时,RubyTest控制台中会显示以下错误:

/Users/jladieu/.rvm/rubies/ruby-1.9.3-p194/bin/ruby:1:无效的多字节字符(US-ASCII)

我的test.rb文件内容很简单:

class Test
  def hello
    puts "Hello world"
  end
end
Run Code Online (Sandbox Code Playgroud)

我的RubyTest.sublime_settings文件如下:

{
  "erb_verify_command": "erb -xT - {file_name} | ruby -c",
  "ruby_verify_command": "ruby -c {file_name}",

  "run_ruby_unit_command": "bundle exec ruby -Itest {relative_path}",
  "run_single_ruby_unit_command": "bundle exec ruby -Itest {relative_path} -n '{test_name}'",

  "run_cucumber_command": "zeus cucumber {relative_path} --no-color",
  "run_single_cucumber_command": "zeus cucumber {relative_path}:{line_number} --no-color",

  "run_rspec_command": "zeus rspec {relative_path}",
  "run_single_rspec_command": "zeus rspec {relative_path}:{line_number}",

  "ruby_unit_folder": "test",
  "ruby_cucumber_folder": "features",
  "ruby_rspec_folder": "spec",

  "check_for_rbenv": false,
  "check_for_rvm": true,

  "ruby_use_scratch" : false,
  "save_on_run": true,
  "ignored_directories": [".git", "vendor", "tmp"],

  "hide_panel": false,

  "before_callback": "",
  "after_callback": ""
}
Run Code Online (Sandbox Code Playgroud)

在命令行运行以下命令可以验证我的语法:

$ ruby -c test.rb 
  Syntax OK
Run Code Online (Sandbox Code Playgroud)

最后,我尝试了一些修复US-ASCII问题的方法无济于事:

  • -ku在RubyTest设置中向verify命令添加标志
  • export RUBYOPT=-Ku在我.bash_profile开放崇高之前
  • export LC_CTYPE=en_US.UTF-8 LANG=en_US.UTF-8在打开崇高之前在我的bash配置文件中

任何人都可以使用类似的设置让它工作?

注意:找到答案(见下文),但有兴趣的话,如果有人找到更好的解决方案,谢谢!

jla*_*ieu 7

根据亚伦和托马斯的反馈进一步调查,改变ruby_verify_command从正常ruby -c {file_name}-c {file_name}正常.

原因是使用check_for_rvm: true导致运行的命令为:

$ /Users/jladieu/.rvm/bin/rvm-auto-ruby ruby -c test.rb
/Users/jladieu/.rvm/rubies/ruby-1.9.3-p194/bin/ruby:1: invalid multibyte char (US-ASCII)
Run Code Online (Sandbox Code Playgroud)

设置ruby_verify_commandruby正确省略会导致运行以下命令:

$ /Users/jladieu/.rvm/bin/rvm-auto-ruby -S -c test.rb
Syntax OK
Run Code Online (Sandbox Code Playgroud)