Как прыжок в конец строки - это Ctrl+ E, где Eего можно рассматривать как конец, почему он прыгает в начало, используя A?
emacs
(и в bash
тоже время) вы можете перейти к началу / концу строки также с помощью клавиш Home
/ End
по умолчанию.
Как прыжок в конец строки - это Ctrl+ E, где Eего можно рассматривать как конец, почему он прыгает в начало, используя A?
emacs
(и в bash
тоже время) вы можете перейти к началу / концу строки также с помощью клавиш Home
/ End
по умолчанию.
Ответы:
В этом вопросе есть две стороны: техническая и историческая.
Технический ответ: потому что bash
использует GNU Readline . В readline
Control-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
макропакет (строка экрана) реализовал их.
Подведем итог:
Смотрите также:
Потому что Ричард Столлман любит Emacs .
Ctrl+ aпереходит на начало строки в Emacs, а libreadline использует те же привязки клавиш, что и Emacs. Bash использует libreadline.
set -o vi
или echo 'set editing-mode vi' >> ~/.inputrc
получить комбинацию клавиш Vim!
Буква «а» была выбрана, потому что Control + b и Control + s уже были взяты, поэтому они решили, что, поскольку A была первой буквой латинского алфавита, это будет то, что они использовали. Откуда я знаю? Потому что сегодня я получил ответ от одного из разработчиков TECO (предшественник EMACS) и EMACS.