在 Python 世界中,有许多可供选择的 Python 解释器添加了很酷的附加功能。一个特别有用的示例是 bpython,它添加了动态语法突出显示、自动拉取文档并显示实时自动完成信息。在 Ruby 世界中,我还没有发现任何添加到基本 IRB 解释器的项目,甚至是这些功能的一个子集。是我看起来不够努力,还是这只是 Ruby 社区缺乏的东西?
9 回答
Use Pry: https://github.com/pry/pry
Let's you:
- start sessions at runtime
- view method source code
- view method documentation (not using RI so you dont have to pre-generate it)
- pop in and out of different contexts
- syntax highlighting
- gist integration
- view and replay history
- open editors to edit method using
edit-method obj.my_method
syntax
A tonne more great and original features
多么巧合。Rubyflow昨天刚刚发布了irbtools gem,这是一个包含许多很酷的 irb 增强 gem 的元 gem。它包含:
wirb
着色并输出为评论fancy_irb
- 不错的 IRB 提示和 IRB 的自动缩进
- 包括 stdlib 的 FileUtils:
ls
,cd
,pwd
,ln_s
,rm
,mkdir
,touch
,cat
- 许多调试助手:
ap
,q
,o
,c
,y
,Object#m
,Object#d
ap
– 真棒打印q
– 像p
,但在一行Object#m
– 有序方法列表(采用整数参数:嵌套级别)Object#d
– 放置对象,返回自身(使用tap
)
- “神奇”的信息常数:
Info, OS, RubyVersion, RubyEngine
OS.windows?
RubyEngine.jruby?
RubyVersion.is.at_least? 1.9
- 剪贴板功能:
copy
和paste
- 也可用:
copy_input
和copy_output
会话历史
- 也可用:
- 调用
vim
(或其他支持的编辑器)来编辑文件,关闭它,它会被加载到你当前的 irb 会话中,由interactive_editor
- 另一种实时加载到 irb 的方式:草图
- 突出显示带有 的字符串
olorize('string')
或带有 的文件ray('path')
,由 coderay 提供支持 - 将 ActiveRecord 数据库条目显示为表
hirb
irb
使用方法重新启动reset!
或更改 Ruby 版本use
rvm!
- 在加载路径中包含当前目录(出于安全原因在 1.9.2 中已删除,但在 IRB 中非常烦人)
- 更短的要求是这样的:
rq:mathn
- 并要求
rrq
- 尝试包含的
Object#ri
助手,由ori
! boson
使用- call commands to get started访问更多命令
irbtools页面上有很好的屏幕截图。关于它的一个好处是每个实用程序都可以独立存在,以防您只想挑选一两个功能。
2013 更新
自从我写这篇文章以来,Pry已经成为一个流行的 IRB 替代品。它没有irbtools
开箱即用的功能,但它可以通过添加很酷功能的插件 gem 进行扩展。您可以像浏览 unix 目录一样浏览源代码:
pry(main)> cd FileUtils
pry(FileUtils):1> show-method rm
From: /opt/ruby/lib/ruby/1.9.1/fileutils.rb @ line 556:
Number of lines: 10
Owner: FileUtils
def rm(list, options = {})
fu_check_options options, OPT_TABLE['rm']
list = fu_list(list)
fu_output_message "rm#{options[:force] ? ' -f' : ''} #{list.join ' '}" if options[:verbose]
return if options[:noop]
list.each do |path|
remove_file path, options[:force]
end
end
pry(FileUtils):2>
您还可以浏览 Ruby 文档,发出 shell 命令,如果您是 Rails 用户,则可以使用pry-rails
gem 在 Rails 控制台中获取信息。还有一种方法可以将它连接到 Sinatra 并与 Heroku 一起使用。
有充足的文档——有很多截屏视频,包括 Railscast。这绝对值得研究。
我从未听说过 IRB 的(流行)替代品,但肯定有几个有用的宝石可以让 IRB 体验更好:
- awesome_print漂亮地打印带有缩进和着色的 Ruby 对象,在尝试查看嵌套散列或其他复杂数据结构时非常有用。
- looksee也非常棒,它提供了一个方法
lp
(查找路径),可以显示 Ruby 对象从哪里获取方法(类、超类等)。 - Sketches将您的编辑器和 IRB 连接起来,因此如果您是喜欢交互式开发的类型,它特别有用。Emacs
inf-ruby
也适用于此。 - Wirble是一整套 IRB 增强功能,如制表符补全和语法高亮。还有Utility Belt,但我个人不使用它,所以无法评论它的功能。
编辑
我忘记了Hirb,它对于在 Rails 控制台中显示 ActiveRecord 查询的结果非常有用。
JRuby 附带jirb_swing
提供代码完成功能。
查看ripl,这是一种模块化的 irb 替代方案,设计为可扩展。您还可以从Is there something like bpython for Ruby 中得到一些答案?.
irb 的替代品领域并不多,但是有一些宝石可以为 irb 添加有用的功能。
最值得注意的是wirble,除其他外,它为您提供彩色输出(虽然不是输入)和超出当前会话的历史记录。
我制作了一个纯 Ruby 控制台,灵感来自 Google Chrome 的 JavaScript 控制台。
https://github.com/sancarn/RubyConsole
它仍然主要是一个 WIP 项目,因为我一直在寻找当前算法的错误,但是我正在构建它以兼容 1.9.3+。
rib是一个模块化的轻量级 Ruby 交互式 shell。
它和 Pry 一样,使用 Ruby 的解析器,因此具有与 Ruby 一致的行为,因此错误更少(例如https://stackoverflow.com/a/39271791/474597)
它是模块化的,因此可以轻松地扩展它以提供更多功能。
截至 2016 年,它也仍在积极维护中。