我正在ruby中编写一个命令行脚本,我正在尝试为一段线条着色。目前,我正在使用' colorize' gem,但是从文档中它只允许您一次为一行文本着色
puts "test".colorize(:green)
puts "test".colorize(:green)
puts "test".colorize(:green)
但是,这对我来说似乎有点多余,我想为所有文本行着色,但只能调用' colorize(:green)'一次而不是3次。
如何在Ruby中完成?
答案 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位部分下找到所有颜色。