【问题标题】:Remove indentation from code从代码中删除缩进
【发布时间】:2013-02-06 01:34:05
【问题描述】:

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

    <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

有什么想法吗?

【问题讨论】:

    标签: ruby string metaprogramming


    【解决方案1】:

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

    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>
    

    【讨论】:

    • 这是一件美丽的事情,特别是与我上面的烂摊子相比。谢谢!
    • 警告,这不能与混合的前导制表符和空格一起正常工作,这种情况经常出现在野外源代码中。许多编辑器允许制表符显示为不同数量的空格,并且会在可能的情况下用制表符替换前导空格。
    • @theTinMan 即使空格和制表符混合在一起也能正常工作,只要一致,例如如果每个缩进都以"\t\t "开头,那就没关系。如果有些行以"\t" 开头,而有些行以" " 开头,那么它将无法正常工作,但我会为此责备程序员,在这种情况下,应该修复源代码。
    猜你喜欢
    • 2011-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-11
    • 2012-09-29
    • 1970-01-01
    • 2013-04-02
    相关资源
    最近更新 更多