2016-06-16 44 views
14

Ho Ruby 2.3.0p0 installato tramite rbenv, su OS X 10.11.4. All'interno di una sessione IRB, la cronologia funziona correttamente. Tuttavia, non riesco ad accedere alla cronologia IRB tra le sessioni.Cronologia IRB non funzionante con Ruby 2.3.0

Ho provato il mio sistema Ruby, 2.0.0p648 e la cronologia delle sessioni IRB funziona correttamente. Ho provato a installare la stessa versione di Ruby tramite rbenv e ha anche una cronologia di lavoro.

Ho confrontato i valori di IRB.conf tra un lavoro e la sessione non lavorativo, e nulla sembra fuori posto (anche se, stranamente, IRB/ext/salva-history.rb è un file vuoto in entrambi i casi).

Guardando il mio file .irb_history, sembra che sia stato sostituito, piuttosto che aggiunto, con i comandi dell'ultima sessione. Posso caricare una sessione IRB 2.0.0 e scorrere bene quei comandi.

Ho provato le risposte elencate in rbenv irb history is not saving senza successo.

Ho anche provato la risposta selezionata in irb history not working. Ho dovuto modificare la risposta selezionata per sostituire il metodo #nitems. Questo ha dimostrato che le righe venivano lette dal file di cronologia e inviate a Readline::HISTORY. Tuttavia, l'esame di Readline::HISTORY non mostra nulla lì.

È possibile eseguire una modifica della cronologia aggiungendo righe precedenti dal mio .irb_history alla cronologia Readline tramite Readline.readline e specificando add_hist = true. Tuttavia, non è sicuramente il modo corretto per aggiungere i comandi precedenti a Readline.

So che posso passare a qualcosa come la leva, ma mi piacerebbe capirlo. Qualche suggerimento sul motivo per cui i comandi non vengono aggiunti a Readline e come cambiarlo?

+0

Una cosa che hai detto sembra strano per me: hai detto salva-history.rb è vuoto. Il mio '~/.rbenv/versions/2.3.0/lib/ruby ​​/ 2.3.0/irb/ext/save-history.rb' è pieno di codice che fa funzionare la storia. Penserei che se il tuo fosse vuoto, la cronologia irb non funzionerebbe con o senza readline. –

+0

Hmm. Non ho più il mio 2.3.0 originale, ma sono tornato indietro e ho guardato il mio 2.0.0, e il file save-history.rb ha effettivamente il codice. Non ho una spiegazione, a parte il fatto che il mio cervello era un po 'fritto a scavare intorno a questo. –

risposta

22

La modifica da riga di comando di OS X si basa sulla libreria libedit. OS X ha una versione della libreria readline che è un wrapper su libedit, ma non si comporta completamente come GNU readline. La storia di irb funziona in Ruby, costruita con il wrapper di OS X fino a Ruby 2.1, ma Ruby 2.2 e successivi devono essere costruiti con GNU readline affinché la storia di irb funzioni.

Di seguito, 2.3.0 può essere qualsiasi versione Ruby dalla versione 2.2.0 in poi. Ho scritto 2.3.0 poiché è quello che Evan ha usato.

Uso MacPorts

rbenv non conoscono MacPorts, quindi è necessario dire esplicitamente in modo da utilizzare readline MacPorts'.

  • sudo port install readline se non è già installato.
  • rbenv uninstall 2.3.0
  • RUBY_CONFIGURE_OPTS=--with-readline-dir=/opt/local rbenv install 2.3.0

Utilizzando Homebrew readline

rbenv automatically detects homebrew and looks in it for readline, quindi, se si sta usando la storia Homebrew e IRB non funziona, hai i non installato o hai costruito il tuo Ruby prima di aver installato readline.

  • brew install readline, se non è già installato
  • rbenv uninstall 2.3.0
  • rbenv install 2.3.0
+0

Grazie Dave! Compilando ora, accetterò una volta che posso verificare. Per inciso, ho appena votato la tua domanda/risposta su http://stackoverflow.com/questions/37617519/is-etc-irbrc-installed-by-os-x-does-irb-read-it come parte della ricerca Stavo facendo. –

+0

L'ho scritto come sottoprodotto per indagare sul problema irb. Siamo stati sulla stessa pista. –

+1

Grazie, ho avuto questo esatto problema su OS X quando eseguivo '' 'rails console''', con Ruby installato tramite rbenv. Inoltre, vorrei anche ottenere l'errore "Impossibile leggere database termcap, utilizzando le impostazioni del terminale muto". Questo sembrava risolvere anche quello. –