Ruby ⌃⇧;H在文本中匹配到';整洁';HTML导致命名错误

Ruby ⌃⇧;H在文本中匹配到';整洁';HTML导致命名错误,ruby,textmate,tidy,textmatebundles,Ruby,Textmate,Tidy,Textmatebundles,昨天我第一次尝试在HTML文档中使用“Tidy”,结果 /tmp/temp_textmate.Z2P0KX:30:in `<main>': undefined method `empty?' for nil:NilClass (NoMethodError) /tmp/temp_textmate.z2pokx:30:in`:nil:NilClass(NoMethodError)的未定义方法“empty” 我没有对包中的代码做任何修改 #!/usr/bin/env ruby -wKU

昨天我第一次尝试在HTML文档中使用“Tidy”,结果

/tmp/temp_textmate.Z2P0KX:30:in `<main>': undefined method `empty?' for nil:NilClass (NoMethodError)
/tmp/temp_textmate.z2pokx:30:in`:nil:NilClass(NoMethodError)的未定义方法“empty”
我没有对包中的代码做任何修改

#!/usr/bin/env ruby -wKU

require ENV['TM_SUPPORT_PATH'] + '/lib/ui.rb'
require ENV['TM_SUPPORT_PATH'] + '/lib/exit_codes.rb'

result = `"${TM_TIDY:-tidy}" -f /tmp/tm_tidy_errors -iq -utf8 \
          -wrap 0 --tab-size $TM_TAB_SIZE --indent-spaces $TM_TAB_SIZE \
        --indent yes \
          ${TM_XHTML:+-asxhtml --output-xhtml yes} \
          ${TM_SELECTED_TEXT:+--show-body-only yes} \
          --enclose-text yes \
          --doctype strict \
        --wrap-php no \
          --tidy-mark no`
status = $?.exitstatus

at_exit { File.unlink('/tmp/tm_tidy_errors') } # Clean up error log

if status == 2 # Errors

  msg = "Errors: " + File.read('/tmp/tm_tidy_errors')
  TextMate.exit_show_tool_tip msg

elsif status == 1 # Warnings - use output but also display notification with warnings

  log = File.read('/tmp/tm_tidy_errors').to_a.select do |line|
    ! (ENV['TM_SELECTED_TEXT'] and (line.include?('Warning: missing <!DOCTYPE> declaration') or line.include?("Warning: inserting missing 'title' element")))
  end.join rescue nil

  unless log.empty?
    options = {
      :title   => "Tidy Warnings",
      :summary => "Warnings for tidying your document (press escape to close):",
      :log     => log
    }
    TextMate::UI.simple_notification(options)
  end

end

if ENV['TM_SOFT_TABS'] == "YES"
  print result
else
  in_pre = false
  result.each_line do |line|
    unless in_pre
      tab_size = ENV["TM_TAB_SIZE"].to_i
      space, text = /( *)(.*)/m.match(line)[1..2]
      line = "\t" * (space.length / tab_size).floor + " "  * (space.length % tab_size) + text
    end

    print line

    in_pre = true  if line.include?("<pre>")
    in_pre = false if line.include?("</pre>")
  end
end
#/usr/bin/env ruby-wKU
需要ENV['TM_SUPPORT_PATH']+'/lib/ui.rb'
需要ENV['TM_SUPPORT_PATH']+'/lib/exit_codes.rb'
结果=`{TM_TIDY:-TIDY}“-f/tmp/TM_TIDY_错误-iq-utf8\
-换行0--制表符大小$TM\u制表符大小--缩进空格$TM\u制表符大小\
--缩进是\
${TM_XHTML:+-asxhtml--output XHTML yes}\
${TM_选定_文本:+--仅显示正文是}\
--附上文本“是”\
--doctype严格\
--包装php编号\
--整齐标记号`
状态=$?.exitstatus
在退出时{File.unlink('/tmp/tm_tidy_errors')}清除错误日志
如果状态==2#错误
msg=“Errors:”+File.read('/tmp/tm\u tidy\u Errors'))
TextMate.exit\u show\u tool\u tip msg
elsif状态==1#警告-使用输出,但也显示带有警告的通知
log=File.read('/tmp/tm_tidy_errors')。要_a.选择do |行|
! (ENV['TM_SELECTED_TEXT']和(line.include?('Warning:missing declaration')或line.include?('Warning:插入缺少的'title'元素”))
结束。加入救援队
除非log.empty?
选项={
:title=>“整洁警告”,
:summary=>“整理文档的警告(按escape关闭):”,
:log=>log
}
TextMate::UI.simple\u通知(选项)
结束
结束
如果环境['TM_SOFT_TABS']=“是”
打印结果
其他的
in_pre=false
结果。每一条线都有一条线|
除非在
tab_size=ENV[“TM_tab_size”]。to_i
空格,text=/(*)(.*)/m.match(line)[1..2]
line=“\t”*(space.length/tab\u size).floor+“”*(space.length%tab\u size)+文本
结束
打印行
in_pre=true如果行。包括?(“”)
log = File.read('/tmp/tm_tidy_errors').to_a.select do |line| ... end.join rescue nil
in_pre=false如果行。包括?(“”)
log = File.read('/tmp/tm_tidy_errors').to_a.select do |line| ... end.join rescue nil
结束 结束
问题行是
,除非log.empty?


我正在OS X 10.6.6上运行TextMate 1.5.10(1631)。我最近安装了rvm,并将默认Ruby升级到1.9.2,但强制TextMate使用1.8.7并没有解决问题。

如果查看
日志的分配,您将看到以下内容:

ruby: warning: -K is specified; it is for 1.8 compatibility and may cause odd behavior
/Applications/TextMate.app/Contents/SharedSupport/Support/lib/ui.rb:129: warning: assigned but unused variable - pid
如果
/tmp/tm_tidy_errors
文件不存在或无法读取,则末尾的
rescue nil
会将
nil
放入
log
。然后脚本将调用
nil
上的
.empty?
方法,但是
nil
对象没有这样的方法,脚本将崩溃并消亡

您可以通过将
rescue nil
更改为
rescue'
或将
除非log.empty?
更改为
除非log.nil?|来抑制该问题log.empty?
但这可能不是真正的问题


您是否有
TM_-TIDY
环境变量集?您的
路径中是否有
tidy
命令?看起来您的整洁安装不正确(或者可能根本不存在)。我的OSX有
/usr/bin/tidy
,显然这是标准配置。试着在终端上手动运行大的
tidy
命令,看看会发生什么。

我也遇到了同样的问题。我已经将Textmate设置为使用ruby的RVM版本,以便快速测试脚本

我通过取消选中我创建的环境变量“TM_RUBY”解决了这个问题

出现的情况是,当使用OSX附带的ruby版本以外的ruby版本时,包装/usr/bin/tidy命令的Textmate脚本没有正确执行


我很想知道狮子出来后会发生什么。希望Textmate能再看一眼这些内置脚本,给它们一点“掸灰尘”的感觉。

在一台运行OS X 10.9.5、Ruby升级到Ruby 2.0.0的机器上,我也遇到了同样的问题。修正了mu的建议,将
除非log.empty?
更改为
除非long.nil?|日志是否为空?
。这使得Tidy可以正常运行,但我的HTML选择的顶部仍然显示令人讨厌的错误:


我通过将脚本的第一行从
#更改而关闭了它/usr/bin/env ruby-wKU
to
#/usr/bin/env ruby-wKU-W0
。很明显,问题仍然存在,但对于一些有用但不重要的东西,由于这个功能,我认为它已经足够好了。

标题中的向上箭头是故意的吗@slugster,是的,这是经过深思熟虑的,因为Ctrl-Shift-H是TextMate中Tidy的默认等效键。关于这个问题,我只是在本地对它进行了测试,没有问题,但是由于命令是用Ruby编写的,您可以尝试在这个问题中添加Ruby标记。我对Ruby不太了解,无法提供更多帮助。据我所知,我的命令版本与你的相同。由于错误是在检查警告时发生的,我猜Tidy安装有问题。@Chuck-谢谢。我已经按照你的建议添加了“ruby”标签。那太好了。但他们没有。三年后,问题依然存在。拜托,这是一个超级强大的文本编辑器,你不能在使用brew或macports安装软件后立即使用它?悲哀的