Warum springt die Tastenkombination Strg + A zum Anfang einer Zeile im Terminal?

11

Wie das Springen zum Ende einer Zeile ist Ctrl+ E, wo Ekann man sich das Ende vorstellen, warum springt es mit zum Anfang A?

xi.lin
quelle
1
Sie können an "A" für "Anfang" denken
Anthon
Oder "A" ist der erste Buchstabe in Alpabet
Costas
Bitte beachten Sie, dass Sie in emacs(und auch in bash) standardmäßig auch mit Home/ Endkeys zum Anfang / Ende der Zeile springen können .
Jimmyij

Antworten:

19

Die Frage hat zwei Seiten, die technische Seite und die historische Seite.

Die technische Antwort ist , weil bashAnwendungen GNU Readline . In readlineControl-a ist an die Funktion gebunden beginning-of-line, Sie können dies zeigen mit:

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

wo \C-abedeutet "Control-a". bind -pzeigt alle Bindungen an (Vorsicht bei der Verwendung bind, es ist leicht, die Tastatur zu beschädigen , wenn Sie versehentlich zusätzliche Optionen oder Argumente angeben).

Einige der oben genannten Bindungen werden standardmäßig hinzugefügt, andere habe ich (via .inputrc) für verschiedene Terminals hinzugefügt, die ich verwendet habe. Seit bash-2.0, wenn die Terminal-Termkappe die Funktionen enthält kh, und kHdann Homeund Endwird auf beginning-of-lineund gesetzt end-of-line. Beide bashund readlinewerden von Chet Ramey , einem Emacs-Benutzer und Entwickler ceeines Emacs-Klons, entwickelt.


(Bitte beachten Sie, dass dies versucht, die langjährige Geschichte von vor vielen Jahrzehnten zusammenzufassen und einige Details zu beschönigen.)

Warum ist es nun besonders Control-a? Readline verwendet standardmäßig Emacs-ähnliche Bindungen . Control-a in GNU Emacs ruft auf move-beginning-of-line, was wir jetzt als "Home" -Funktion betrachten.

Das ursprüngliche EMACS von Stallman and Steel wurde von Fred Wrights E- Editor (einem frühen WYSIWYG-Editor) und TECO (einem kryptischen modalen Editor / einer Sprache) inspiriert. EMACS war eine Reihe von Makros für TECO. Siehe Essential E [PDF] (von SAIL , 1980). E verwendete jedoch Control-Form für "Zeilenanfang", dies war auf der "DataDisc" -Tastatur, die eine ControlTaste und eine FormTaste hatte. Die damalige Space-Cadet-Tastatur ( Homedie übrigens keine Taste hatte, obwohl sie eine hatte End) wird häufig für die Emacs-Tastaturschnittstelle verantwortlich gemacht .

Eine der wünschenswerten Funktionen von EMACS war die Verwendung des Control-R-Leitungsbearbeitungsmodus Control-R in Echtzeit (TECO ist älter als CRT- / Tastaturterminals). Die Tastenkombinationen finden Sie auf Seite 6 der MIT AI Lab 1978 ITS- Einführung zu der EMACS-Editor [gescanntes PDF], wobei ┌ für Control steht. In diesem Modus waren die Tastenkombinationen alle Kontrollsequenzen, größtenteils mnemonisch: Strg-E Ende dieser Zeile , Strg-P zur vorherigen Zeile bewegen , Strg-N zur nächsten Zeile bewegen , Strg-B ein Zeichen rückwärts und nicht zuletzt Kontrolle - Gehen Sie zum Anfang dieser Zeile . Costas 'Vorschlag für den "ersten Buchstaben des Alphabets" ist so gut wie jeder andere.

(Eine ähnliche Schlüssel Bindung ist in dem tvlibMakropaket , das EMACS verhalten machen sollte , um wie die TVEDIT Editor, verbindliche Kontrolle A und E zu Rückwärts- und Vorwärts Satz , aber unterschiedliche Sequenzen für den Beginn und das Ende der Zeile verwendet.)

Die Control-A / Control-E-Bindungen im "^ R-Modus" wurden direkt im ITS TECO (1983, Version 1208, siehe _teco_.tgzArchiv auf der Nocrew PDP10 / ITS- Site oder auf Github ) implementiert , obwohl ich nicht genauer bestimmen kann als sie zum ersten Mal erschienen, und die TECO-Quelle gibt nicht an, warum bestimmte Bindungen ausgewählt wurden. Das obige MIT EMACS-Dokument von 1978 impliziert, dass EMACS 1978 kein natives TECO-Control-A / Control-E verwendet hat. Möglicherweise hat das scrlinMakropaket (Bildschirmzeile) diese implementiert.

Um es noch einmal zusammenzufassen:

  • Bash verwendet Readline
  • Readline-Tastenkombinationen folgen Emacs / EMACS
  • Das ursprüngliche EMACS wurde mit TECO erstellt und übernimmt viele Funktionen
  • Die Makros im interaktiven Modus von TECO verwendeten (meistens) mnemonische Steuerschlüsselbindungen, und "Zeilenanfang" wurde schließlich Control-A zugewiesen

Siehe auch:

mr.spuratic
quelle
6

Weil Richard Stallman Emacs mag .

Ctrl+ aspringt in Emacs an den Anfang der Zeile, und libreadline verwendet dieselben Tastenkombinationen wie Emacs. Bash verwendet libreadline.

Jasen
quelle
2
Beachten Sie auch, dass Sie Vim-Tastenkombinationen erhalten set -o vioder echo 'set editing-mode vi' >> ~/.inputrcerhalten können!
Wchargin
Warum geben die Leute diese Antwortpunkte? Die Frage war, warum Strg + a als Befehl gewählt wurde, um an den Anfang der Zeile zu gelangen, nicht was der Befehl ist.
Wurtel
@Wurtel Die Antwort ist im ersten Satz, siehe "Geschichte von Gnu".
Jasen
3
Sorry, aber weil Richard Stallman Emacs mag. sagt mir nicht, warum Strg-A mich zum Anfang der Zeile bringt. Warum nicht Strg-S oder Strg-X oder was auch immer?!
Wurtel