我在JRUBY下使用Rails控制台时遇到了各种问题,包括:
- 没有提示字符
- Tab 键无法补全(插入了字面上的 Tab 键)
- 向上/向下箭头不能浏览历史命令(分别插入
^[[A
或^[[B
) - 向左/向右箭头不能移动光标(分别插入
^[[D
或^[[C
) - Home/End 键不能将光标移动到行的开头和结尾(分别插入
1~
或4~
);Ctrl+a / Ctrl+e 可以正常工作 - Ctrl+c 会终止整个控制台而不是当前输入的命令行
- Ctrl+d 无效,直到我按下 Enter (然后在我的 Unix shell 中执行Ctrl+d 和 Enter 之间输入的任何内容)。
我是通过 rvm 安装 JRuby 解释器的:
rvm install jruby-1.6.8 --1.9
我的 Rails 项目使用 Bundler 进行管理(不是 rvm gemsets),因此我使用 bundle exec rails c
命令运行 Rails 控制台。有趣的是,原始的 irb
以及 bundle exec irb
命令没有上述大部分问题,除了 Home/End 键和 Ctrl+c 需要在获取新提示行前按下 Enter。
我可以使用一个简单的 Rails Gemfile
复制这个问题:
source 'https://rubygems.org'
gem 'rails', '3.2.6'
gem 'sqlite3'
我的shell是zsh
,运行在Ubuntu 12.04 64位上。 $JAVA_HOME
是/usr/lib/jvm/java-7-openjdk-amd64
,但我安装这个解释器时可能仍然是java-6,如果这很重要。
更新:一些修复
缺失的提示符字符显然是由于Rails控制台将IRB.conf[:PROMPT_MODE]
设置为:NULL
造成的。 对于常规的irb
,我的设置为:RVM
(显然rvm在~/.rvm/scripts/irb.rb
中这样做;通过注释脚本来排除rvm引起此问题)。 在~/.irbrc
中提供:PROMPT_MODE
值可以解决此问题。 我认为类似的问题可能会通过更改:IGNORE_SIGINT
和:IGNORE_EOF
引起Ctrl+c / Ctrl+d问题,但它们都设置为其默认值。
通过将:USE_READLINE
设置为true,可以解决制表符补全和箭头键的问题。
这是我的当前的~/.irbrc
文件,它似乎解决了上述问题:
require 'irb/completion'
IRB.conf[:PROMPT_MODE] = :SIMPLE
IRB.conf[:USE_READLINE] = true
IRB.conf[:AUTO_INDENT] = true