История 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, и как это изменить?
Ответы
Ответ 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.
Затем следуйте инструкциям, чтобы добавить его в свой путь. Затем выполните 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