Ruby 2.3.0p0がOS X 10.11.4のrbenvを介してインストールされています。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 history not working でも選択した回答を試しました。 #nitemsメソッドを置き換えるには、選択した回答を変更する必要がありました。これは、履歴ファイルから行が読み取られ、Readline::HISTORY
にプッシュされていることを示しています。ただし、Readline::HISTORY
を調べても何も表示されません。
以前の行を.irb_historyからReadline.readline
を介してReadline履歴に追加し、add_hist = trueを指定することで、履歴をハックすることができます。ただし、これは前のコマンドをReadlineに追加するための適切な方法ではありません。
私はこじ開けのようなものに切り替えることができることを知っていますが、これを理解したいと思います。コマンドがReadlineに追加されない理由、およびそれを変更する方法に関する提案はありますか?
OS Xのコマンドライン編集は、libeditライブラリに基づいています。 OS Xには、libeditのラッパーであるreadlineライブラリのバージョンがありますが、GNU readlineのように完全には動作しません。irb履歴はRubyでビルドされますOS XのラッパーでRuby 2.1までですが、Ruby 2.2以降はGNU irbのreadlineでビルドする必要があります働く歴史。
以下では、 2.3.0
は任意のRuby 2.2.0以降のバージョンです。私は2.3.0
それは、エヴァンが使用したものだからです。
Homebrewの使用
Ruby homebrewを使用してインストールすると、readlineの動作バージョンが表示されます。
brew install Ruby
次に、指示に従ってPATHに追加します。次に 実行gem install irb
と表示されている場合can't find gem irb
。
MacPortsの使用
rbenvはMacPortsを認識しないため、MacPortsのreadlineを使用するように明示的に指示する必要があります。
Sudo port install readline
まだインストールされていない場合。rbenv uninstall 2.3.0
Ruby_CONFIGURE_OPTS=--with-readline-dir=/opt/local rbenv install 2.3.0
rbenvでHomebrewを使用する
rbenvは自動的にhomebrewを検出してreadlineを探します 、つまり、Homebrewを使用していて、irb履歴が機能しない場合は、readlineをインストールしていないか、Ruby readlineをインストールする前。
brew install readline
まだインストールされていない場合rbenv uninstall 2.3.0
rbenv install 2.3.0