Подтвердить что ты не робот

История IRB не работает с Ruby 2.3.0

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

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

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

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

Если вы установите ruby с помощью homebrew, он принесет рабочую версию readline.

  • brew install ruby

Затем следуйте инструкциям, чтобы добавить его в свой путь. Затем выполните gem install irb, если там написано can't find gem irb.

Использование 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

rbenv автоматически обнаруживает homebrew и ищет в нем readline, поэтому, если вы используете Homebrew и история irb не работает, вы либо не установили readline, либо создали Ruby до того, как установили readline.

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