如何格式化irb命令提示符

时间:2011-05-18 02:37:31

标签: ruby irb

以前我使用的是Ruby 1.8,我的irb命令提示符看起来像这样:

Air ~: irb
>> a = 1
=> 1
>> b = 2
=> 2
>> a + b
=> 3

我安装了rvm(和Ruby 1.9.2),现在我的irb命令提示符如下所示:

Air ~: irb
ruby-1.9.2-p180 :001 > a = 1
 => 1 
ruby-1.9.2-p180 :002 > b = 2
 => 2 
ruby-1.9.2-p180 :003 > a + b
 => 3 

有没有办法从命令行中删除ruby-1.9.2-p180 :001

7 个答案:

答案 0 :(得分:19)

irb手册页上有“Customizing prompt”部分。以下是我的例子:

IRB.conf[:PROMPT][:CUSTOM] = {
  :PROMPT_I => ">> ",
  :PROMPT_S => "%l>> ",
  :PROMPT_C => ".. ",
  :PROMPT_N => ".. ",
  :RETURN => "=> %s\n"
}
IRB.conf[:PROMPT_MODE] = :CUSTOM
IRB.conf[:AUTO_INDENT] = true

要使用此功能,请将其添加到~/.irbrc文件中(如果该文件不存在则创建该文件。)

答案 1 :(得分:16)

~/.irbrc中,只需添加

即可
IRB.conf[:PROMPT_MODE] = :SIMPLE

答案 2 :(得分:8)

如果您经常运行irb命令,请尝试运行irb --simple-prompt。这大大缩短了提示,使其更容易理解。

答案 3 :(得分:2)

irb --simple-prompt

在Lynda.com上看到了这个。

答案 4 :(得分:1)

为避免在命令行中始终提供您想要的提示,您可以configure the prompt via the ~/.irbrc config file

$ echo "IRB.conf[:PROMPT_MODE] = :DEFAULT" > ~/.irbrc
$ irb
irb(main):001:0> quit
$ echo "IRB.conf[:PROMPT_MODE] = :SIMPLE" > ~/.irbrc
$ irb
>> quit
$ 

答案 5 :(得分:0)

在RVM中查看此note about IRB prompt

请注意,您可以在主文件夹中创建.irbrc文件,以获取IRB的各种设置。 例如,请参阅this document

中的“配置提示”

您还可以puts IRB.conf[:PROMPT_MODE]puts IRB.conf查看当前有效的所有各种设置。例如,在您的情况下,:PROMPT_MODE可能设置为“RVM”。

答案 6 :(得分:0)

任何想添加即时时间戳的人,isn't possible yet(请选中“特殊字符串”部分),因此我以一种猴子修补的方式实现了它:

module IrbTimePrompt
  def prompt(prompt, ltype, indent, line_no)
    # I used %T as time format, but you could use whatever you want to.
    # Check https://apidock.com/ruby/Time/strftime for more options
    p = prompt.dup.gsub(/%t/, Time.new.strftime('%T'))
    super(p, ltype, indent, line_no)
  end
end

module IRB
  class Irb
    prepend IrbTimePrompt
  end
end

现在,将其添加到您的lib/项目文件夹中(如果是Rails项目,请确保lib/config.autoload_pathsconfig/application.rb的一部分)或更具破坏性的方式(不推荐),在您的本地ruby实例中查找lib/irb.rb文件,并在def prompt方法中,向该方法添加新的when条件,例如:

    when "t"
      Time.now.strftime('%-d-%-m %T%Z')

然后在您的.irbrc文件(它可以位于您的主文件夹或根项目文件夹中)中,您可以修改提示。我要添加当前提示,但请根据您的需要进行调整:

def rails_prompt
  # This is my base prompt, displaying line number and time
  def_prompt = '[%01n][%t]'
  # Maybe you're only running as `irb` an not `rails console`, so check first
  # if rails is available
  if defined? Rails
    app_env = Rails.env[0...4]
    if Rails.env.production?
      puts "\n\e[1m\e[41mWARNING: YOU ARE USING RAILS CONSOLE IN PRODUCTION!\n" \
           "Changing data can cause serious data loss.\n" \
           "Make sure you know what you're doing.\e[0m\e[22m\n\n"
      app_env = "\e[31m#{app_env}\e[0m" # red
    else
      app_env = "\e[32m#{app_env}\e[0m" # green
    end
    def_prompt << "(\e[1m#{app_env}\e[22m)" # bold
  end

  IRB.conf[:PROMPT] ||= {}
  IRB.conf[:PROMPT][:WITH_TIME] = {
    PROMPT_I: "#{def_prompt}> ",
    PROMPT_N: "#{def_prompt}| ",
    PROMPT_C: "#{def_prompt}| ",
    PROMPT_S: "#{def_prompt}%l ",
    RETURN: "=> %s\n",
    AUTO_INDENT: true,
  }
  IRB.conf[:PROMPT_MODE] = :WITH_TIME
end

rails_prompt

然后启动irbrails console并检查效果:

[1][13:01:15](deve)> 'say hello to your new prompt'
=> "say hello to your new prompt"
[2][13:01:23](deve)>