Techioz Blog

IRB キーボード ショートカットは無効になっていますか?これらを再度有効にすることはできますか?私が何を壊してしまったのでしょうか?

概要

予想される行動: この回答のようなreadlineショートカットを使用したキーボードショートカット。

実際に何が起こるか: Ctrl+l を押して画面をクリアします。

irb
2023-08-08 20:31:17 -0600
Loaded Profile methods
irb.main{
irb.m${ ^Ltyping stuff^E^A

Ruby バージョン: Ruby 3.2.2 (2023-03-30 リビジョン e51014f9c0) [x86_64-linux]

私の ~/.irbrc が不注意でショートカットを妨害しているのではないかと思いました。ソースされないように名前を変更しましたが、動作は同じままで、irb は readline 動作の代わりに「^#{letter_I_pressed}」を画面に書き込みます。

を押すと Ctrl-l がクリアされ、vi のような動作が可能になります (0 は行頭に移動し、Shift-c は何も行いません)。 では、bash モードを vi に設定すると、これが壊れる可能性がありますか? 私の /etc/profile には次のものがあります:

set -o vi
set editing-mode vi
set keymap vi
set show-mode-in-prompt on

それで私は試しました: set -o emacs ;編集モード emacs を設定します。 emacs のキーマップを設定します。 irb

奇妙なことに、これは emacs のような readline 動作を有効にしませんし、上で説明したことも変わりません。

解決策

Ruby は readline サポートなしでコンパイルされている可能性があります。これはほとんどの場合、Ruby または pkgconfig の最近の変更が原因で、pkgconfig が適切なライブラリを見つけられないため、さまざまなコンパイル フラグが適切に処理されません。

前提条件がインストールされていることを確認し、コンパイル中に機能フラグを有効にしてください。この問題が発生した一部のプラットフォームまたは特定のビルドでは、readline に加えて rlwrap をインストールすると便利であることもわかりました。これは、不足しているアプリケーションに GNU readline および BSD libedit サポートを提供する readline ラッパーです。例えば:

brew install rlwrap
rlwrap irb

readline または libedit が irb または icr に適切にコンパイルされていない場合の問題を修正しました。後者は Crystal の REPL で、この問題のせいで readline と libedit のサポートが当たり外れがあることが最近わかりました。

あるいは、次の環境値を設定して再コンパイルしてみることもできます。

export LDFLAGS="-L/opt/homebrew/opt/readline/lib"
export CPPFLAGS="-I/opt/homebrew/opt/readline/include"
export PKG_CONFIG_PATH="/opt/homebrew/opt/readline/lib/pkgconfig"

OpenSSL に関連する同様の問題も報告されているため、そこでも同様の操作を行う必要がある場合があります。