Какой параметр управляет перемещением курсора в командной строке?

Какой параметр управляет перемещением курсора в командной строке?

В некоторых системах 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и echoctlstty/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] не путать сlibeditlinereadline "работает аналогично", предоставляя только режим редактирования emacs.

Связанный контент