Wie das Springen zum Ende einer Zeile ist Ctrl+ E, wo Ekann man sich das Ende vorstellen, warum springt es mit zum Anfang A?
emacs
(und auch in bash
) standardmäßig auch mit Home
/ End
keys zum Anfang / Ende der Zeile springen können .
Wie das Springen zum Ende einer Zeile ist Ctrl+ E, wo Ekann man sich das Ende vorstellen, warum springt es mit zum Anfang A?
emacs
(und auch in bash
) standardmäßig auch mit Home
/ End
keys zum Anfang / Ende der Zeile springen können .
Antworten:
Die Frage hat zwei Seiten, die technische Seite und die historische Seite.
Die technische Antwort ist , weil bash
Anwendungen GNU Readline . In readline
Control-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-a
bedeutet "Control-a".
bind -p
zeigt 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 kH
dann Homeund Endwird auf beginning-of-line
und gesetzt end-of-line
. Beide bash
und readline
werden von Chet Ramey , einem Emacs-Benutzer und Entwickler ce
eines 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 tvlib
Makropaket , 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_.tgz
Archiv 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 scrlin
Makropaket (Bildschirmzeile) diese implementiert.
Um es noch einmal zusammenzufassen:
Siehe auch:
Weil Richard Stallman Emacs mag .
Ctrl+ aspringt in Emacs an den Anfang der Zeile, und libreadline verwendet dieselben Tastenkombinationen wie Emacs. Bash verwendet libreadline.
set -o vi
oder echo 'set editing-mode vi' >> ~/.inputrc
erhalten können!