Dlaczego skrót Ctrl + A przeskakuje na początek linii w terminalu?

11

Jak przeskakiwanie do końca linii to Ctrl+ E, gdzie Emożna ją traktować jako koniec, dlaczego przeskakuje do początku używania A?

xi.lin
źródło
1
Możesz pomyśleć o „A” dla „Anfanga”
Anthon
Lub „A” to pierwsza litera w alfabecie
Costas
Zauważ, że w emacs(i bashrównież w) możesz przeskoczyć do początku / końca linii również domyślnie za pomocą klawiszy Home/ End.
jimmij

Odpowiedzi:

20

Pytanie ma dwie strony, techniczną i historyczną.

Odpowiedź techniczna jest taka, ponieważ bashwykorzystuje GNU Readline . W readlineControl-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-aoznacza „Control-a”. bind -ppokaż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 kHnastępnie Homei Endzostanie ustawiony na beginning-of-linei end-of-line. Zarówno bashi readlinezostały opracowane przez Chet Ramey , użytkownik Emacs, a także twórca ceklonu 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-linefunkcję, 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 tvlibpakiecie 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_.tgzarchiwum 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 scrlinpakiet 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ż:

pan. spuratic
źródło
6

Ponieważ Richard Stallman lubi Emacsa .

Ctrl+ aprzeskakuje na początek linii w Emacsie, a libreadline używa tych samych klawiszy, co Emacs. Bash używa libreadline.

Jasen
źródło
2
Zauważ też, że możesz zrobić set -o vi, lub echo 'set editing-mode vi' >> ~/.inputrcuzyskać skróty klawiszowe Vima!
wchargin
Dlaczego ludzie dają te punkty odpowiedzi? Pytanie brzmiało, dlaczego ctrl + a zostało wybrane jako polecenie przejścia na początek linii, a nie to, co to polecenie.
wurtel
@Wurtel Odpowiedź znajduje się w pierwszym zdaniu, patrz „historia Gnu”.
Jasen
4
Przepraszam, ale ponieważ Richard Stallman lubi Emacsa. nie mówi mi, dlaczego ctrl-a zabiera mnie na początek linii. Dlaczego nie ctrl-s, ctrl-x lub cokolwiek innego ?!
wurtel
0

Litera „a” została wybrana, ponieważ Control + bi Control + s zostały już zajęte, więc zdecydowali, że skoro A była pierwszą literą alfabetu łacińskiego, to będzie to, czego użyli. Skąd mam wiedzieć? Ponieważ dzisiaj otrzymałem odpowiedź od jednego z twórców TECO (poprzednika EMACS) i EMACS.

PrayingSavesLives
źródło