ruby 是否可以将IRB提示配置为动态更改?

6psbrbz9  于 11个月前  发布在  Ruby
关注(0)|答案(6)|浏览(107)

我想在IRB中浏览文件系统,并让提示符改变以反映当前的工作目录,但我不知道如何在每个命令后进行提示符更新。最终,我想在日常工作中更多地使用IRB,让bash溜走。我在我的.irbrc中尝试了这一点:

require 'fileutils'
include FileUtils

IRB.conf[:PROMPT][:CUSTOM] = {
    :PROMPT_N => "\e[1m:\e[m ",
    :PROMPT_I => "\e[1m#{pwd} >\e[m ",
    :PROMPT_S => "FOO",
    :PROMPT_C => "\e[1m#{pwd} >\e[m ",
    :RETURN => ""
}
IRB.conf[:PROMPT_MODE] = :CUSTOM

字符串
但IRB提示未更新:

julianmann@mango:~ > irb
/users/julianmann > puts pwd
/users/julianmann
/users/julianmann > cd 'dev'
/users/julianmann > puts pwd
/users/julianmann/dev
/users/julianmann >


我真的很想改变提示。

wixjitnu

wixjitnu1#

这里有一个获取工作目录的快速方法。它有点脆弱,但它在ruby 1.8.7和1.9.2上工作。
将提示符字符串设置为如下内容:

"%N(%m):%03n:%i %~> ".tap {|s| def s.dup; gsub('%~', Dir.pwd); end }

字符串
irb本身不理解“%~”指令,所以我用它来替换。这个技巧依赖于irb调用dup来生成提示符。

8tntrjer

8tntrjer2#

另一个选择是使用fresh。它基于irb替代ripl,并且还将当前目录显示为提示符:]

9fkzdhlc

9fkzdhlc3#

你必须像这样运行(别名)irb

irb --prompt custom

字符串
或者将IRB.conf[:PROMPT_MODE] = :CUSTOM添加到您的.irbrc
P.S.这不是对你问题的确切回答。但是你可以尝试使用RUSH
它没有当前工作目录的概念,但它很容易配置。

b0zn9rqh

b0zn9rqh4#

虽然它是一种静态的,但看看,它可能会帮助你在Linux(Ubuntu 14.04)
您只需按照一些简单的步骤就可以更改irb控制台的恼人提示
打开您的终端
后藤到位置/home/leapfrog/.rvm/scripts

$ cd ~/.rvm/scripts

字符串
打开文件'irbrc. rb',使用超级用户的能力覆盖

$ sudo gedit irbrc.rb


你可以看到这样的一部分代码。

# Set up the prompt to be RVM specific.
#@prompt = {
# :PROMPT_I => "#{rvm_ruby_string} :%03n > ", # default prompt
# :PROMPT_S => "#{rvm_ruby_string} :%03n%l> ", # known continuation
# :PROMPT_C => "#{rvm_ruby_string} :%03n > ",
# :PROMPT_N => "#{rvm_ruby_string} :%03n?> ", # unknown continuation
# :RETURN => " => %s \n",
# :AUTO_INDENT => true
#}

@prompt = {
 :PROMPT_I => "ROR: %03n > ", # default prompt
 :PROMPT_S => "%03n%l> ", # known continuation
 :PROMPT_C => "%03n > ",
 :PROMPT_N => "%03n?> ", # unknown continuation
 :RETURN => " O/P => %s \n",
 :AUTO_INDENT => true
}


只需保存文件并重新启动irb控制台进一步模式,您可以看到此链接https://cbabhusal.wordpress.com/2014/12/22/ruby-rvm-change-prompt-of-irb/

okxuctiv

okxuctiv5#

如果它可能有助于讨论,尽管为时已晚:可以在IRB环境初始化后更改提示,例如通过IRB.conf[:MAIN_CONTEXT]上的某些值
对于c = IRB.conf[:MAIN_CONTEXT]的绑定,影响提示格式的字段可能包括以下内容

  • c.prompt_c
  • c.prompt_i
  • c.prompt_n
  • c.prompt_s
  • c.return_format
  • c.auto_indent_mode
  • c.prompt_mode

直接更新prompt_i字段的示例:

irb(main):009:0> IRB.conf[:MAIN_CONTEXT].prompt_i="%N %m %i >>"
=> "%N %m %i >>"

irb main 0 >>

字符串
IRB module documentation (3.0.0)中记录的格式说明符集之外,目前可能不支持在IRB中使用在显示提示时将被评估的表达式。每个提示字符串可以简单地用作文字格式字符串。
尽管有一些限制,但在IRB初始化后更新IRB提示是可能的。
免责声明:这不保证更新所有与提示相关的状态值,在IRB.conf[:MAIN_CONTEXT]

vql8enpb

vql8enpb6#

Kelvin聪明的“快速破解”答案依赖于dup,在最新版本的IRB(现在是v1.11.0)中不再起作用。
这里有一个允许提供动态IRB提示的替代方案,它利用了main.to_s在IRB提示符中作为%m提供的事实:

# Save this file as `.irbrc`.
#
# Put it in your home directory to make it your default,
# or in a particular directory where you want it.
#
# Note: If you have an `.irbrc` in your home directory it
#       will take precedence over a local `.irbrc`.

# define `main.to_s` to provide dynamic context info.
# `main.to_s` is `%m` in the IRB prompt.
# `%m` is included in the default IRB prompt.
def self.to_s
  "#{Dir.pwd}"
end

# This should be the default already, but adding this line
# ensures you use an IRB prompt config that includes `%m`.
IRB.conf[:PROMPT_MODE] = :DEFAULT

字符串

相关问题