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/ Endkeys 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/ Endkeys 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 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:
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 vioder echo 'set editing-mode vi' >> ~/.inputrcerhalten können!