如何垂直对齐 Ruby 中的标准输出文本(如 Rails)

How to vertically align stdout text in Ruby (like Rails)

我正在尝试创建一个 CLI 应用程序,我想将文本输出到控制台。我不知道如何格式化我想要的格式。

当您键入 rails new app 时,您会得到以下输出:

  create  tmp/cache
  create  tmp/cache/assets
  create  vendor/assets/javascripts
  create  vendor/assets/javascripts/.keep
  create  vendor/assets/stylesheets
  create  vendor/assets/stylesheets/.keep
     run  bundle install

如何编写输出以确保所有命令都像那样垂直对齐?

PS。我正在使用雷神,这很重要。

谢谢

我认为你想多了。他们只是打印出文本行之间有间距。

puts "  create  tmp/cache"
puts "  create  tmp/cache/assets"
# ...

将以完全相同的方式输出。

Ruby 中有一个函数可以稍微帮助解决这个问题 (String#rjust),它会在字符串的左侧填充空格。因此,如果您希望第一列的宽度为 10 个字符,则可以 rjust 值为 10 的字符串,它会将它们右对齐。例如,如果您要遍历哈希,您可能 运行 以下代码:

hash = { "hello" => "world", "foo" => "bar" }
hash.each do |key, value|
  puts "#{key.rjust(7)}  #{value}"
end
#  hello  world
#    foo  bar

您可以根据自己的情况使用古老的 sprintf。有一个 number of stylistic and utilitarian reasons why,但通常它会使代码更简洁。您还可以以编程方式指定所需的填充。在您的具体示例中:

output = {create: 'something.rb',
          identical: 'something_else.rb',}
output.each do |key, value|
  puts sprintf '%10s  %3s', key.to_s, value
end

给你

   create  something.rb 
identical  something_else.rb