5

irbで逆インタラクティブ検索を実行してから、制御文字を入力すると(実際にこれを見たのは矢印キーだけです)。だから私はこのセッションから始めます:

$ irb
>> print "hello"
hello

次に、を入力します^rh

$ irb
>> print "hello"
hello
(reverse-i-search)`he': print "hello"

ここまでは順調ですね。次に、左矢印を押すと、次のようになります。

$ irb
>> print "hello"
hello
>> print "[Dhello"

その後、矢印を使用すると、カーソルが通常どおりに移動します。

4

2 に答える 2

3

これで問題が解決するわけではありませんが、少なくとも、あなたが尋ねた質問 (理由) には答えることができます。

左矢印は、ESC、[、および D の 3 文字として端末に入力されます (これをテストするreadには、左矢印を入力して押すと、エスケープ文字がどのようにレンダリングされるかが表示されます) ^[[D^[

どういうわけかirb、そうすべきではないときに ESC 文字を拾います。そのため、ESC は履歴検索を終了し、[D文字通り入力されます。readline を使用している他のプログラムを見ると、Bash と Python は正しく動作しますが、ledit(あいまいです。申し訳ありません ^^) この問題も発生しています。

誰かがこれに対する解決策を知らない限り、私が考えることができる唯一の回避策は、矢印キーの代わりに ESC を押して履歴検索を終了することです。もちろん、それ以上編集する必要がない場合は、Enter キーを押します。

于 2011-01-12T17:55:55.513 に答える
1

vi 編集モードを有効にしていますか?

~  $ irb
1.9.3p392 :001 > Readline.vi_editing_mode?
  => true

$HOME/.inputrcを介してファイルでオンにしましたset editing-mode vi。無効にすると、矢印キーが「修正」されました。

@JoLiss が述べたように、他の readline プログラム (bash など) も正しく動作していました。つまり、これは Ruby の問題です。参照: http://bugs.ruby-lang.org/issues/7859#change-36333

于 2013-04-26T09:29:02.227 に答える