#консоль #shell #freebsd
Я зашёл по ssh на сервер, на котором установлена ОС FreeBSD (например, на хостинге nic.ru установлена FreeBSD 8.1), и при работе в консоли обнаружил, что некоторые привычные сочетания клавиш (например, ctrl+стрелка вправо/влево для "перепрыгивания" между словами) не работают. Вместо ожидаемого действия я получаю в консоль мусорный вывод такого вида: ;5D;5D;5C;5C~~ Как заставить работать сочетания клавиш, которые не работают в консоли FreeBSD "из коробки"?
Ответы
Ответ 1
Дело в ненастроенном readline(3). "Мусор", который видно в терминале - это коды нажатия клавиш и их сочетаний, которым не присвоены никакие функции (чтобы увидеть коды для сочетаний клавиш, которым функции присвоены, можно нажать Ctrl+V и потом интересующее сочетание клавиш (или единичную клавишу) - для кнопки Enter, например, код будет ^M - то есть вместо Enter в консоли можно нажимать Ctrl+M с тем же эффектом, сюрприз!). Уже назначенные на разные клавиши и их сочетания функции можно посмотреть командой bind -lpvs. Для sh и bash настройки readline можно задать в файле .inputrc в домашней папке пользователя. Для реализации неработающих из коробки в FreeBSD сочетаний клавиш я использую следующие настройки: # ~/.inputrc: readline initialization file. # (you can view all current assignments by runnig `bind -lpvs`) # let Insert, PageUP, PageDown keys work properly in bash under FreeBSD and Linux: "\e[2~": overwrite-mode "\e[5~": beginning-of-history "\e[6~": end-of-history # let Ctrl-left-arrow and Ctrl-right-arrow jump over words: "\e[1;5C": forward-word "\eOC": forward-word "\e[1;5D": backward-word "\eOD": backward-word Стоит отметить, что код сочетания клавиш, который можно прочесть с помощью Ctrl+V, может отличаться для разных видов терминалов - например, не совпадать в "обычном" терминале и внутри screen. Вы можете самостоятельно расширить предлагаемый ~/.inputrc для таких случаев.
Комментариев нет:
Отправить комментарий