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

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

$ irb
>> print "hello"
hello

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

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

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

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

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

Ответы [ 2 ]

3 голосов
/ 12 января 2011

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

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

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

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

1 голос
/ 26 апреля 2013

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

...