ruby macos readline irb ruby-2.3

La historia de IRB no funciona con Ruby 2.3.0



macos readline (1)

Tengo Ruby 2.3.0p0 instalado a través de rbenv, en OS X 10.11.4. Dentro de una sesión de IRB, la historia funciona bien. Sin embargo, no puedo acceder al historial de IRB en las sesiones.

Probé mi sistema Ruby, 2.0.0p648, y el historial en las sesiones de IRB funciona bien. Intenté instalar esa misma versión de Ruby a través de rbenv y también tiene un historial de trabajo.

He comparado los valores de IRB.conf entre una sesión de trabajo y una sesión que no funciona, y nada parece fuera de lugar (aunque, extrañamente, irb / ext / save-history.rb es un archivo en blanco en ambos casos).

Mirando mi archivo .irb_history, parece que se está reemplazando, en lugar de adjuntar, con los comandos de la sesión más reciente. Puedo cargar una sesión IRB 2.0.0 y desplazarme por esos comandos sin problemas.

He intentado las respuestas enumeradas en el historial de rbenv irb no es guardar sin éxito.

También probé la respuesta seleccionada en el historial de irb no funciona . Tuve que alterar la respuesta seleccionada para reemplazar el método #nitems. Esto demostró que las líneas se estaban leyendo en el archivo de historial y se continuaron con Readline::HISTORY . Sin embargo, examinar Readline::HISTORY no muestra nada allí.

Puedo hacer una especie de hack en el historial agregando líneas anteriores de mi .irb_history al historial de Readline.readline través de Readline.readline , y especificando add_hist = true. Sin embargo, definitivamente no es la forma correcta de agregar los comandos anteriores a Readline.

Sé que puedo cambiar a algo como hacer palanca, pero me gustaría resolver esto. ¿Alguna sugerencia sobre por qué los comandos no se están agregando a Readline y cómo cambiar eso?


La edición de línea de comandos de OS X se basa en la biblioteca libedit. OS X tiene una versión de la biblioteca readline que es una envoltura alrededor de libedit, pero no se comporta completamente como GNL readline. el historial de irb funciona en Ruby construido con el envoltorio de OS X hasta Ruby 2.1, pero Ruby 2.2 y posteriores deben construirse con línea de lectura GNU para que el historial de irb funcione.

A continuación, 2.3.0 puede ser cualquier versión de Ruby a partir de 2.2.0. Escribí 2.3.0 ya que eso es lo que Evan usó.

Utilizando MacPorts

rbenv no conoce MacPorts, por lo que debe indicarle explícitamente que use la línea de lectura de MacPorts.

  • sudo port install readline si no está instalado ya.
  • rbenv uninstall 2.3.0
  • RUBY_CONFIGURE_OPTS=--with-readline-dir=/opt/local rbenv install 2.3.0

Usando Homebrew

rbenv detecta Homebrew automáticamente y busca en readline , así que, si está utilizando Homebrew e irb, el historial no funciona, es posible que no haya instalado readline o haya creado Ruby antes de instalar readline.

  • brew install readline si no está instalado ya
  • rbenv uninstall 2.3.0
  • rbenv install 2.3.0