Pytanie ma dwie strony, techniczną i historyczną.
Odpowiedź techniczna jest taka, ponieważ bash
wykorzystuje GNU Readline . W readline
Control-a jest związany z funkcją beginning-of-line
, możesz to pokazać za pomocą:
$ bind -q beginning-of-line
beginning-of-line can be invoked via "\C-a", "\M-OH", "\M-[1~", "\M-[7~", "\M-[H".
gdzie \C-a
oznacza „Control-a”.
bind -p
pokaże wszystkie wiązania (zachowaj ostrożność bind
, łatwo jest złamać klawiaturę, jeśli przypadkowo podasz dodatkowe opcje lub argumenty).
Niektóre z powyższych powiązań są dodawane domyślnie, inne dodałem (przez .inputrc
) dla różnych używanych terminali. Od wersji bash-2.0, jeśli terminal termcap zawiera możliwości kh
, a kH
następnie Homei Endzostanie ustawiony na beginning-of-line
i end-of-line
. Zarówno bash
i readline
zostały opracowane przez Chet Ramey , użytkownik Emacs, a także twórca ce
klonu Emacs.
(Należy pamiętać, że stara się to podsumować wiele lat historii sprzed wielu dziesięcioleci i zawiera pewne szczegóły.)
Dlaczego w szczególności jest to Control-a? Readline domyślnie używa powiązań podobnych do Emacsa . Control-a w GNU Emacs wywołuje move-beginning-of-line
funkcję, którą obecnie uważamy za funkcję „home”.
Oryginalny EMACS firmy Stallman and Steel został zainspirowany edytorem E Freda Wrighta (wczesny edytor WYSIWYG) i TECO (tajemniczy edytor modalny / język) - EMACS był zestawem makr dla TECO. Patrz Essential E [PDF] (z SAIL , 1980). E użył jednak formularza kontrolnego do „początku linii”, to było na klawiaturze „DataDisc”, która miała Controlklawisz i Formklawisz. Klawiatura space-kadet czasu (brakuje Homeklucza przy okazji, choć mieliśmy End) jest powszechnie obwiniany dla interfejsu klawiatury Emacs.
Jedną z pożądanych cech EMACS było wykorzystanie trybu edycji linii w czasie rzeczywistym Control-R TECO Control-R (TECO wyprzedza terminale CRT / klawiaturę). Kluczowe powiązania można zobaczyć na stronie 6 MIT AI Lab 1978 ITS Wprowadzenie do edytor EMACS [zeskanowany plik PDF], w którym ┌ oznacza Kontrolę. W tym trybie wszystkie przypisania klawiszy były sekwencjami kontrolnymi, w dużej mierze mnemonicznymi: Control-E Koniec tej linii , Control-P przejście do poprzedniej linii , Control-N przejście do następnej linii , Control-B do tyłu o jeden znak , a także kontrola -Przejście na początek tej linii , sugestia Costasa dotycząca „pierwszej litery alfabetu” jest tak dobra, jak każda inna.
(Podobne wiązanie klawiszy znajduje się w tvlib
pakiecie makr, które miały na celu sprawienie, aby EMACS zachowywał się jak edytor TVEDIT, wiążąc kontrolę A i E do zdania do tyłu i do przodu , ale używał różnych sekwencji na początku i na końcu linii.)
Wiązania Control-A / Control-E w „trybie ^ R” zostały zaimplementowane bezpośrednio w ITS TECO (1983, wersja 1208, patrz _teco_.tgz
archiwum na stronie nocrew PDP10 / ITS lub na Github ), chociaż nie mogę dokładniej określić kiedy pojawiły się po raz pierwszy, a źródło TECO nie wskazuje, dlaczego wybrano konkretne wiązania. Powyższy dokument MIT EMACS z 1978 r. Sugeruje, że w 1978 r. EMACS nie używał natywnego sterownika TECO Control-A / Control-E, możliwe jest, że scrlin
pakiet makr (linia ekranu) zaimplementował je.
Przypomnę:
- bash używa readline
- Powiązania klawiszy readline są zgodne z Emacs / EMACS
- oryginalny EMACS został stworzony w TECO, dziedzicząc wiele funkcji
- Makra trybu interaktywnego TECO wykorzystywały (głównie) mnemoniczne powiązania klawiszy kontrolnych, a „początek linii” ostatecznie przypisano do Control-A
Zobacz też: