2016-06-16 9 views
14

У меня есть Ruby 2.3.0p0, установленный через rbenv, на OS X 10.11.4. В рамках IRB-сессии история работает нормально. Тем не менее, я не могу получить доступ к истории IRB через сеансы.История IRB не работает с Ruby 2.3.0

Я пробовал свою систему Ruby, 2.0.0p648 и историю через сеансы IRB. Я попытался установить ту же самую версию Ruby через rbenv, и у нее также есть рабочая история.

Я сравнил значения IRB.conf между рабочим и нерабочим сессии, и ничего не выглядывает из места (хотя, удачливый, ЭСО/внутр/копи-history.rb является пустой файл в обоих случаях).

Если посмотреть на мой файл .irb_history, кажется, что он заменяется, а не прилагается, командами последнего сеанса. Я могу загрузить 2.0.0 IRB-сессию и прокручивать эти команды просто отлично.

Я пробовал ответы, перечисленные в rbenv irb history is not saving, без успеха.

Я также попробовал выбранный ответ в irb history not working. Мне пришлось изменить выбранный ответ, чтобы заменить метод #nitems. Это показало, что строки были зачитаны из файла истории и нажаты на Readline::HISTORY. Тем не менее, рассмотрение Readline::HISTORY ничего не показывает.

Я могу взломать историю, добавив предыдущие строки из моей .irb_history в историю Readline через Readline.readline и указав add_hist = true. Тем не менее, это определенно не правильный способ добавления предыдущих команд в Readline.

Я знаю, что могу переключиться на что-то вроде pry, но я хотел бы понять это. Любые предложения о том, почему команды не добавляются в Readline, и как это изменить?

+0

Одна вещь, которую вы сказали, кажется мне странным: вы сказали, копи-history.rb пустым. Мой '~/.rbenv/versions/2.3.0/lib/ruby ​​/ 2.3.0/irb/ext/save-history.rb' полный кода, который заставляет историю работать. Я бы подумал, что если ваш был пуст, история irb не будет работать с readline или без нее. –

+0

Хм. У меня больше нет моего оригинала 2.3.0, но я просто вернулся и посмотрел на свой 2.0.0, и файл save-history.rb действительно имеет в нем код. У меня нет объяснений, кроме того, что мой мозг был немного обжарен от копания на этом. –

ответ

22

Редактирование командной строки OS X основано на библиотеке libedit. OS X имеет версию библиотеки readline, которая является оберткой вокруг libedit, но она не ведет себя полностью как GNU readline. История irb работает в Ruby, построенном с оберткой OS X до Ruby 2.1, но Ruby 2.2 и более поздние версии должны быть построены с использованием GNU readline для истории IRB.

В следующем случае 2.3.0 может быть любой Ruby версии от 2.2.0 on. Я написал 2.3.0, так как это использовал Эван.

Использование MacPorts

rbenv не знает о MacPorts, так что вы должны явно указать его использовать Readline MacPorts'.

  • sudo port install readline если он еще не установлен.
  • rbenv uninstall 2.3.0
  • RUBY_CONFIGURE_OPTS=--with-readline-dir=/opt/local rbenv install 2.3.0

Использование Homebrew

rbenv automatically detects homebrew and looks in it for readline, поэтому, если вы используете Homebrew и IRB истории не работает, вы либо не установлен Readline или вы построили ваш Ruby перед установкой readline.

  • brew install readline, если он не установлен уже
  • rbenv uninstall 2.3.0
  • rbenv install 2.3.0
+0

Спасибо Дэйв! Компиляция теперь будет приниматься после проверки. Кстати, я только что проголосовал за ваш вопрос/ответ на http://stackoverflow.com/questions/37617519/is-etc-irbrc-installed-by-os-x-does-irb-read-it как часть исследования Я делал. –

+0

Я написал это как побочный продукт исследования проблемы irb. Мы были на одном и том же пути. –

+1

Спасибо, у меня была эта точная проблема на OS X при запуске '' 'rails console''', с Ruby, установленным через rbenv. Кроме того, я также получаю сообщение об ошибке «Невозможно прочитать базу данных termcap, используя неработающие настройки терминала». Это, похоже, исправить это. –

 Смежные вопросы

  • Нет связанных вопросов^_^