Как использовать интерактивный_редактор, когда консоль REPL запускается в контексте определенного объекта

Я пытаюсь программно запустить консоль так, чтобы:

Может показаться, что два условия, которые я пытаюсь выполнить, являются взаимоисключающими. Ниже я пишу скрипт, запускающий REPL, привязанный к контексту списка [1,2,3].

# 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
---
- 1
- 2
- 3

Есть ли способ решить эту проблему? Должен ли я зарегистрировать это как проблему на interactive_editor Gem? Такие же ошибки возникают, когда я использую IRB вместе с interactive_editor или irbtools.

Я предполагаю, что изменение контекста затрудняет для 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)

Я использую OS X Yosemite 10.10.3, но мне удалось воспроизвести эту проблему на нескольких других компьютерах с Linux.


person Nicolas De Jay    schedule 14.05.2015    source источник


Ответы (1)


Я нашел способ обойти это:

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

Это все еще не объясняет, почему я не могу заставить этот пример работать с interactive_prompt.

person Nicolas De Jay    schedule 15.05.2015