Почему 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