Wie das Springen zum Ende einer Zeile ist Ctrl+ E, wo Ekann man sich das Ende vorstellen, warum springt es mit zum Anfang A?
bash
keyboard-shortcuts
xi.lin
quelle
quelle
emacs
(und auch inbash
) standardmäßig auch mitHome
/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 . Inreadline
Control-a ist an die Funktion gebundenbeginning-of-line
, Sie können dies zeigen mit:wo
\C-a
bedeutet "Control-a".bind -p
zeigt alle Bindungen an (Vorsicht bei der Verwendungbind
, 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ältkh
, undkH
dann Homeund Endwird aufbeginning-of-line
und gesetztend-of-line
. Beidebash
undreadline
werden von Chet Ramey , einem Emacs-Benutzer und Entwicklerce
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 dasscrlin
Makropaket (Bildschirmzeile) diese implementiert.Um es noch einmal zusammenzufassen:
Siehe auch:
quelle
Weil Richard Stallman Emacs mag .
Ctrl+ aspringt in Emacs an den Anfang der Zeile, und libreadline verwendet dieselben Tastenkombinationen wie Emacs. Bash verwendet libreadline.
quelle
set -o vi
oderecho 'set editing-mode vi' >> ~/.inputrc
erhalten können!