Почему irb вставляет управляющие символы в мой буфер обратного интерактивного поиска?

Если я выполняю обратный интерактивный поиск в irb, а затем ввожу управляющий символ (клавиши со стрелками - единственные, с которыми я видел это на самом деле). Итак, я начну с этой сессии:

$ irb
>> print "hello"
hello

затем введите ^r, h

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

Все идет нормально. Затем я нажимаю на левую стрелку и в итоге получаю следующее:

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

Последующее использование стрелок перемещает курсор в обычном режиме.

2 ответа

Это не решит вашу проблему, но, по крайней мере, я могу ответить на вопрос, который вы задали (почему):

Стрелка влево вводится в терминал в виде трех символов ESC, [и D. (Вы можете проверить это, набрав read и нажав стрелку влево, которая отображает ^[[D, где ^[ как визуализируется escape-персонаж.)

как-то irb подбирает символ ESC, когда не должен; поэтому ESC завершает поиск истории, и [D вводится буквально. Глядя на другие программы, использующие readline, Bash и Python ведут себя корректно, но ledit (да, непонятно - извините ^^) тоже есть эта проблема.

Если кто-то не знает решения для этого, единственный обходной путь, который я могу придумать, - это нажать ESC вместо клавиши со стрелкой для выхода из поиска по истории. Или нажмите Enter, если вам не нужно редактировать дальше, конечно.

У вас включен режим редактирования 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

Другие вопросы по тегам