当 REPL 控制台在特定对象的上下文中为 运行 时如何使用 interactive_editor

How to use interactive_editor when REPL console is run in context of a particular object

我正在尝试以编程方式启动控制台,以便:

看来我要满足的两个条件是相互排斥的。下面我写了一个脚本来启动一个绑定到 [1,2,3] 列表上下文的 REPL。

# test.rb
require 'ripl'
require 'interactive_editor'

Ripl.start :binding => [1,2,3].instance_eval { binding }

如果你运行ruby test.rb,你可以看到你在[1,2,3]的上下文中:

>> self
=> [1, 2, 3]
>> map { |a| a * 2 }
=> [2, 4, 6]

但如果您尝试使用 interactive_editor 的功能:

>> vim "something"
=> [1, 2, 3]

最后一行启动 vim 并实际写入文件 "something"(没有我明确保存):

# something
---
- 1
- 2
- 3

有什么办法可以解决这个问题吗?我应该将此作为问题提交到 interactive_editor Gem 吗?当我将 IRBinteractive_editorirbtools.

一起使用时,会出现相同类型的错误

我的猜测是,更改上下文会使 interactive_editor 解析其对象定义变得相当困难,但我不确定这是如何工作的。

在此先感谢,如果我遗漏了重要信息,请告诉我。

  1. ruby 2.1.5p273 (2014-11-13 revision 48405) [x86_64-darwin14.0]
  2. iteractive_editor (0.0.10)
  3. irbtools (2.0.1, 1.7.1)
  4. ripl (0.7.1)
  5. ripltools (0.7.0)

我是 运行ning OS X Yosemite 10.10.3,但我已经成功地在其他几个 Linux 机器上复制了这个问题。

我找到了解决这个问题的方法:

def edit(*args)
  system("$EDITOR #{args.join(' ')")
end

这仍然不能解释为什么我不能让这个例子与 interactive_prompt 一起工作。