为什么我的IRB提示符使用ANSI颜色代码会破坏页面向上/向下的复制/粘贴行为?

时间:2012-01-24 18:49:01

标签: ruby irb

我加入了我的.irbrc:

IRB.conf[:PROMPT].reverse_merge!(:RAILS_ENV => {:PROMPT_I=>"#{current_app} #{rails_env} #{prompt} ", :PROMPT_N=>"#{current_app} #{rails_env} #{prompt} ", :PROMPT_S=>nil, :PROMPT_C=>"?> ", :RETURN=>"=> %s\n"}) 
IRB.conf[:PROMPT_MODE] = :RAILS_ENV

如果我这样做:

current_app = "\e[31mfoo_bar_app\e[0m"
rails_env = "\e[32m#{RAILS_ENV}\e[0m"

然后提示出现了漂亮的颜色,但是如果我将一些文本复制到我的copybuffer并粘贴它,如果我进行页面向上/向下翻页以转到输入的当前文本的开头/结尾,我的光标就像跳转到文本的中间进行翻页,对于向下翻页,它向右跳到一个没有输入任何内容的空白区域,然后我的光标位置完全搞砸了。

有没有办法可以纠正这个问题?我真的很喜欢彩色提示。

2 个答案:

答案 0 :(得分:3)

我愿意打赌这与我在Colorized output breaks linewrapping with readline

中提出的问题类似

试试这个:

current_app = "\001\e[31mfoo_bar_app\e[0m\002"
rails_env = "\001\e[32m#{RAILS_ENV}\e[0m\002"

基本上,你的提示不会忽略非打印字符,这会导致奇怪的事情发生。

答案 1 :(得分:0)

是的,只有颜色代码需要在\ 001和\ 002这样

\001\e[37m\002[%~] #{RUBY_VERSION}-p#{RUBY_PATCHLEVEL} - r#{release}\001\e[0m\002production