Почему комбинация клавиш Ctrl + A переходит на начало строки в терминале?

11

Как прыжок в конец строки - это Ctrl+ E, где Eего можно рассматривать как конец, почему он прыгает в начало, используя A?

xi.lin
источник
1
Вы можете думать об «A» для «Anfang»
Anthon
Или «А» - это первая буква в алфавите
Костас
Обратите внимание, что в emacs(и в bashтоже время) вы можете перейти к началу / концу строки также с помощью клавиш Home/ Endпо умолчанию.
Джимми

Ответы:

20

В этом вопросе есть две стороны: техническая и историческая.

Технический ответ: потому что bashиспользует GNU Readline . В readlineControl-a привязан к функции beginning-of-line, вы можете показать это с помощью:

$ bind -q beginning-of-line
beginning-of-line can be invoked via "\C-a", "\M-OH", "\M-[1~", "\M-[7~", "\M-[H".

где \C-aозначает «контроль-а». bind -pпокажет все привязки (будьте осторожны при использовании bind, легко сломать клавиатуру, если вы случайно предоставите дополнительные опции или аргументы).

Некоторые из вышеуказанных привязок добавляются по умолчанию, другие я добавил (через .inputrc) для различных терминалов, которые я использовал. Начиная с bash-2.0, если терминал termcap содержит возможности kh, а kHзатем Homeи Endбудет установлено beginning-of-lineи end-of-line. Оба bashи readlineразработаны Chet Ramey , пользователем Emacs, а также разработчиком ceклона Emacs.


(Обращаем ваше внимание, что здесь делается попытка обобщить историю многих лет за многие десятилетия назад, а также некоторые детали.)

Теперь, почему это Control-а в частности? Readline по умолчанию использует Emacs-подобные привязки . Control-a в GNU Emacs вызывает то move-beginning-of-line, что мы сейчас считаем «домашней» функцией.

Столлман и оригинальный EMACS Стил были вдохновлен Фредом Райта E редактором (ранний редактор WYSIWYG) и ТЕКО (зашифрованный модальный редактор / языка) - EMACS был набор макросов для TECO. См. Essential E [PDF] (из SAIL , 1980). E, однако, использовал Control-Form для «начала строки», это было на клавиатуре «DataDisc», в которой были Controlклавиша и Formклавиша. Пространство-курсант клавиатура времени (отсутствует Homeключ, кстати, хотя он имел End) обычно обвиняет для интерфейса клавиатуры Emacs.

Одной из желательных особенностей EMACS было использование режима редактирования строки в реальном времени TECO Control-R (TECO предшествует терминалам CRT / клавиатуры), вы можете увидеть привязки клавиш на странице 6 MIT AI Lab 1978 ITS Введение в редактор EMACS [отсканированный PDF], где ┌ используется для обозначения элемента управления. В этом режиме все сочетания клавиш представляли собой последовательности управления, в основном мнемонические: Control-E Конец этой строки , Control-P - переход на предыдущую строку , Control-N - переход на следующую строку , Control-B - назад на один символ и, что не менее важно, Control -Переход к началу этой строки , предложение Костаса о «первой букве алфавита» для этого так же хорошо, как и любой.

(Аналогичный ключ привязки находится в tvlibмакропакете , которая направлена , чтобы EMACS вести себя как редактор TVEDIT, связывание управления А и Е в обратное и прямое предложение , но используются разные последовательности для начала и конца строки.)

Привязки Control-A / Control-E в режиме «^ R» были реализованы непосредственно в ITS TECO (1983, версия 1208, см. _teco_.tgzАрхив на сайте PDP10 / ITS nocrew или на Github ), хотя я не могу определить более точно когда они впервые появились, и источник TECO не указывает, почему были выбраны какие-либо конкретные привязки. Приведенный выше документ EMACS MIT 1978 года подразумевает, что в 1978 году EMACS не использовал родной TECO Control-A / Control-E, возможно, что scrlinмакропакет (строка экрана) реализовал их.

Подведем итог:

  • Bash использует readline
  • привязки клавиш readline следуют Emacs / EMACS
  • оригинальный EMACS был создан с TECO, унаследовав множество функций
  • Макросы интерактивного режима TECO использовали (в основном) мнемонические привязки управляющих клавиш, и «начало строки» в конечном итоге было присвоено Control-A

Смотрите также:

mr.spuratic
источник
6

Потому что Ричард Столлман любит Emacs .

Ctrl+ aпереходит на начало строки в Emacs, а libreadline использует те же привязки клавиш, что и Emacs. Bash использует libreadline.

Jasen
источник
2
Обратите внимание, что вы можете сделать set -o viили echo 'set editing-mode vi' >> ~/.inputrcполучить комбинацию клавиш Vim!
wchargin
Почему люди дают такие ответы? Вопрос был в том, почему ctrl + a была выбрана в качестве команды для перехода в начало строки, а не в какую команду.
wurtel
@ Wurtel Ответ находится в первом предложении, см. «История Гну».
Ясен
4
Извините, но потому что Ричард Столлман любит Emacs. не говорит мне, почему Ctrl-A приводит меня к началу строки. Почему бы не Ctrl-S, или Ctrl-X, или что-то еще ?!
wurtel
0

Буква «а» была выбрана, потому что Control + b и Control + s уже были взяты, поэтому они решили, что, поскольку A была первой буквой латинского алфавита, это будет то, что они использовали. Откуда я знаю? Потому что сегодня я получил ответ от одного из разработчиков TECO (предшественник EMACS) и EMACS.

PrayingSavesLives
источник