IRB默认禁用Enter提交多行输入,如何恢复原有行为?
恢复IRB 1.15.2的多行输入提交行为
问题
IRB 1.15.2(配套Reline 0.6.1)默认修改了多行输入的提交规则:编辑多行代码时(比如往上调取已定义的方法进行修改),按Enter、Ctrl+Enter等按键都无法提交代码,必须将光标定位到end所在行后按Enter才能完成提交。而此前的正常逻辑是按Alt+Enter或Ctrl+v+Enter换行,按Enter直接提交代码,现在需要恢复这一原有行为。
实际场景示例:
$ irb >> IRB::VERSION #=> "1.15.2" >> Reline::VERSION #=> "0.6.1" # 先定义一个方法 def test "test" end # 按上箭头调回这个方法,尝试提交 # 按上箭头两次,再按Enter、Ctrl+Enter、Alt+Enter、Ctrl+v+Enter...均无效 # 必须按向下箭头移到`end`行,再按Enter才能提交 ?> def test "> " "> "> "> "> ?> test" >> end
解决步骤
要恢复旧行为,修改IRB配置即可:
找到或创建IRB的配置文件:
- macOS/Linux:
~/.irbrc - Windows:
C:\Users\<你的用户名>\.irbrc
- macOS/Linux:
在配置文件中添加以下代码:
# 可选:关闭自动缩进和自动补全,核心是下面的配置 IRB.conf[:AUTO_INDENT_MODE] = false IRB.conf[:USE_AUTOCOMPLETE] = false # 核心配置:强制按Enter就提交,忽略代码是否闭合 IRB.conf[:EVAL_ON_ENTER] = true
如果上述配置未生效,再尝试针对Reline的调整:
# 移除Reline默认的代码结构检测逻辑 if defined?(Reline::DEFAULT_DIALOG_PROC) Reline.send(:remove_const, :DEFAULT_DIALOG_PROC) end Reline::DEFAULT_DIALOG_PROC = proc { |context| false }
- 保存配置文件后重启IRB,即可恢复原有操作逻辑:按Enter提交代码,按Alt+Enter或Ctrl+v+Enter换行。
原理说明
IRB 1.15.2新增了通过Reline自动检测代码结构的功能,只要检测到代码存在未闭合的结构(比如缺少end),就会阻止提交操作。上述配置通过关闭该自动检测逻辑,恢复了旧版本中直接提交的行为。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

