web-dev-qa-db-ja.com

IRB履歴がRuby 2.3.0で機能しない

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に追加されない理由、およびそれを変更する方法に関する提案はありますか?

24
Evan Pon

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
41