В некоторых системах Unix я могу нажать Ctrl-A или Ctrl-E, чтобы перейти в начало или конец строки. В некоторых системах Unix я не могу, и он просто печатает ^A или ^E и т. д. Что контролирует, будет ли это нажатие клавиши работать так, как я ожидаю (перемещаться по командной строке), или будет печатать символ ^A, ^E и т. д.?
решение1
Все зависит от конкретной реализации оболочки (у вас могут быть разные оболочки по умолчанию в разных системах или даже для разных пользователей в одной системе, например, bash, ksh, tcsh и т. д.).
Также это зависит от самой оболочки.
Например, bash поддерживает два режима: emacs и vi. Каждый режим имеет свои собственные сочетания клавиш (например, emacs или vi). Чтобы изменить его, нужно выполнить set -o emacs
(обычно это значение по умолчанию) илиset -o vi
Более подробную информацию вы можете найти в документации по вашей конкретной оболочке.
решение2
вкратце
set -o emacs
включит сочетания клавиш Ctrl-A, Ctrl-E, Ctrl-B и т. д. в большинстве оболочек, которые вы, вероятно, будете использовать.
Оболочка может не иметь возможности редактирования строк или находиться в vi
режиме редактирования (единственном, указанном параметромстандартный).
Если режим редактирования не активен emacs
, Ctrl-A и Ctrl-E не имеют особого значения. Если настройки echo
и echoctl
stty/termios включены, все клавиши управления, которые не обрабатываются специально, будут отображаться в виде "каретки" ^A
, ^X
, и т. д.
Многие оболочки (например, ksh
или zsh
) определяют режим редактирования по умолчанию (vi или emacs) на основе значений VISUAL
и EDITOR
переменных окружения (в указанном порядке приоритета, а также обрабатывают такие варианты, как vim
, elvis
, xemacs
и т. д.).
Это было сломано (очень раздражающе!) в mksh
, но это также все еще актуально в других pdksh
производных от , оболочках.
Другие оболочки, такие как bash
или , tcsh
по умолчанию используют emacs
режим редактирования, но это также можно переопределить из файла конфигурации библиотеки редактирования строк.
Дляreadline
библиотека, используемая bash
и многими другими программами, файлы конфигурации ~/.inputrc
(или файл, указанный в INPUTRC
переменной среды) с резервным вариантом /etc/inputrc
и настройками:
set editing-mode vi
set editing-mode emacs
Для библиотеки editline
/ libedit
[1], используемой многими программами BSD, файл конфигурации обычно имеет вид~/.editrc
и настройки такие:
bind -v # for vi
bind -e # for emacs
[1] не путать сlibeditline
readline "работает аналогично", предоставляя только режим редактирования emacs.