ruby输出多背景、颜色、效果的字符串

作者:周星 发布:2017-10-07

       很多开发者在网上问这样的问题:在写一些脚本时,为了让输出更加醒目,在 puts 一些提示语句时能否加上颜色?比如红色的“抓取失败”,绿色的“开始抓取”等等,下面我总结了一些方法,给大家分享一下。

1. gem colorized

       colorize 是一个 ruby 字符串类的扩展,它使用 ANSI 转移序列。提供了一些方法来设置字符串的颜色、背景色、效果,安装方法和其它 gem 一样,执行 gem install colorize,然后在脚本中 require 进来就可以了。

下面举一些例子:

#encoding: utf-8
require 'colorize'

puts "蓝色文字".colorize(:blue)
puts "浅蓝色文字".colorize(:light_blue)
puts "还是蓝色文字".colorize(:color => :blue)
puts "浅蓝色文字红色背景".colorize(:color => :light_blue, :background => :red)
puts "浅蓝色文字红色背景的第二种写法".colorize(:light_blue ).colorize( :background => :red)
puts "蓝色文字红色背景的第三种写法".light_blue.on_red
puts "蓝色文字红色背景带下划线".blue.on_red.underline

       String 类增加了如下的类方法,如果不知道 colorize 提供了哪些颜色、效果等,可以执行以下下面的类方法

String.colors - 所有颜色
String.modes  - 所有效果
String.color_matrix - 展示颜色矩阵
String.color_matrix("FOO") - 展示关于"foo"的颜色矩阵

       通过上面的例子可以很清晰的了解如何使用了,是用 colorize 传一个 hash,还是使用 string.xxx.on_xxx 完全取决于个人习惯了。

2.colorize 方法

如果想不依赖第三方包,可以自己实现一个简便的方法。

def colorize(str, color_code = 31)
  "\e[#{color_code}m#{str}\e[0m"
end

def blue(str, color_code = 34)
  colorize(str, color_code)
end

def red(str, color_code = 31)
  colorize(str, color_code)
end

使用的是时候直接传字符串即可。

stackoverflow 一位哥哥给的方法可以直接用,但是个人不推荐

class String
  def black;          "\033[30m#{self}\033[0m" end
  def red;            "\033[31m#{self}\033[0m" end
  def green;          "\033[32m#{self}\033[0m" end
  def brown;          "\033[33m#{self}\033[0m" end
  def blue;           "\033[34m#{self}\033[0m" end
  def magenta;        "\033[35m#{self}\033[0m" end
  def cyan;           "\033[36m#{self}\033[0m" end
  def gray;           "\033[37m#{self}\033[0m" end
  def bg_black;       "\033[40m#{self}\033[0m" end
  def bg_red;         "\033[41m#{self}\033[0m" end
  def bg_green;       "\033[42m#{self}\033[0m" end
  def bg_brown;       "\033[43m#{self}\033[0m" end
  def bg_blue;        "\033[44m#{self}\033[0m" end
  def bg_magenta;     "\033[45m#{self}\033[0m" end
  def bg_cyan;        "\033[46m#{self}\033[0m" end
  def bg_gray;        "\033[47m#{self}\033[0m" end
  def bold;           "\033[1m#{self}\033[22m" end
  def reverse_color;  "\033[7m#{self}\033[27m" end
end

puts "I'm back green".bg_green
puts "I'm red and back cyan".red.bg_cyan
puts "I'm bold and green and backround red".bold.green.bg_red

然后看看在 console 上执行的效果吧。

如果您对本文有什么意见或建议,请联系博主

支付宝扫码赞助博主


评论(0)