0

我正在尝试创建一个函数,从代码中删除无关的开始选项卡,使其显示更整洁。如在,我希望我的功能变成这样:

    <div>
      <div>
       <p>Blah</p>
      </div>
    </div>

进入这个:

<div>
  <div>
   <p>Blah</p>
  </div>
</div>

(所有这些的目标是创建一个 Rails 部分,我可以将格式化的代码粘贴到其中,以显示在左侧对齐的 pre 标记中)。

到目前为止,我已经得到了这个,但是它出错了,我不知道为什么。以前从未使用过 gsub,所以我猜问题就在那里(尽管调试说明也指向第一个“结束”行):

def tab_stripped(code)
  # find number of tabs in first line
  char_array = code.split(//)
  counter = 0
  char_array.each do |c|
    counter ++ if c == "\t"
    break if c != "\t"
  end

  # delete that number of tabs from the beginning of each line
  start_tabs = ""
  counter.times do 
    start_tabs += "\t"
      end
  code.gsub!(start_tabs, '')
  code
end

有任何想法吗?

4

1 回答 1

4

我的个人图书馆中的一个(稍作修改):

class String
  def unindent; gsub(/^#{scan(/^\s+/).min}/, "") end
end

它比您要求的更笼统。它不仅处理制表符,还处理空格,并且它不会调整到第一行,而是调整到缩进最少的行。

puts <<X.unindent
    <div>
      <div>
       <p>Blah</p>
      </div>
    </div>
X

给出:

<div>
  <div>
   <p>Blah</p>
  </div>
</div>
于 2013-02-06T01:38:41.910 回答