Ruby将一段文本着色

时间:2014-07-25 02:17:23

标签: ruby

我正在ruby中编写一个命令行脚本,我正在尝试为一段线条着色。目前,我正在使用' colorize' gem,但是从文档中它只允许您一次为一行文本着色

puts "test".colorize(:green)
puts "test".colorize(:green)
puts "test".colorize(:green)

但是,这对我来说似乎有点多余,我想为所有文本行着色,但只能调用' colorize(:green)'一次而不是3次。

如何在Ruby中完成?

4 个答案:

答案 0 :(得分:2)

为此定义一种方法:

def putsg(text)
  puts text.colorize(:green)
end

然后打电话给那个方法:

putsg "test"
putsg "test"
putsg "test"

答案 1 :(得分:1)

puts ["test", "test", "test"].join($/).colorize(:green)

puts ["test", "test", "test"].map{|s| s.colorize(:green)}

答案 2 :(得分:0)

关于你的陈述" ...但是从文档中它只允许你一次为一行文字着色"

您可以使用不同的颜色为同一行的不同部分着色。

s = "Hello" ss = "world" puts "#{s.red} #{"there".white} #{s.blue}"

您也可以像这样实现目标:

s = "test" puts "#{s}\n#{s}\n#{s}".green

或者:

s1 = "check" s2 = "this" s3 = "out" puts "#{s1}\n#{s2}\n#{s3}".green

答案 3 :(得分:0)

您还可以定义如下方法: 输入是您想要作为字符串的颜色以及想要输出的文本。这将在命令提示符下工作。

  def colorized_text(color,text)
    #Find colors here: https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit
    color_code_hash = {
        'red' => 196,
        'green' => 40,
        'yellow' => 226,
        'blue' => 27,
    }
    puts"\e[38;5;#{color_code_hash[color]}m#{text}\e[0m"
  end 

我发现这比使用colorize宝石要好得多,因为它只能给您8种颜色。您可以在ansi转义Wiki页面的8位部分下找到所有颜色。