Auf manchen Unix-Systemen kann ich mit Strg-A oder Strg-E an den Anfang oder das Ende der Zeile springen. Auf manchen Unix-Systemen geht das nicht und es wird nur ^A oder ^E usw. ausgegeben. Wodurch wird gesteuert, ob dieser Tastendruck wie erwartet funktioniert (Bewegung in der Befehlszeile) oder ob die Zeichen ^A, ^E usw. ausgegeben werden?
Antwort1
Es hängt alles von der spezifischen Shell-Implementierung ab (Sie haben möglicherweise unterschiedliche Standard-Shells auf unterschiedlichen Systemen oder sogar für unterschiedliche Benutzer innerhalb eines einzelnen Systems, z. B. Bash, KSH, Tcsh usw.).
Es hängt auch von der Shell selbst ab.
Bash unterstützt beispielsweise zwei Modi: Emacs und Vi. Jeder Modus hat seine eigenen Tastenkürzel (ähnlich wie Emacs oder Vi). Um diese zu ändern, müssen Sie ausführen set -o emacs
(normalerweise ist es ein Standardkürzel) oderset -o vi
Weitere Informationen finden Sie in Ihrer spezifischen Shell-Dokumentation.
Antwort2
tl;dr
set -o emacs
aktiviert die Emacs-Tastenkombinationen Strg-A, Strg-E, Strg-B usw. in den meisten Shells, die Sie wahrscheinlich verwenden.
Die Shell verfügt möglicherweise nicht über die Möglichkeit zur Zeilenbearbeitung oder befindet sich im vi
Bearbeitungsmodus (der einzige, der von derStandard).
Außerhalb des emacs
Bearbeitungsmodus haben Strg-A und Strg-E keine besondere Bedeutung. Wenn die Einstellungen echo
und echoctl
stty/termios aktiviert sind, werden alle nicht speziell behandelten Steuertasten in der "Caret"-Notation angezeigt ^A
.^X
Viele Shells (wie ksh
oder zsh
) bestimmen den Standardbearbeitungsmodus (vi oder emacs) basierend auf den Werten von VISUAL
und EDITOR
Umgebungsvariablen (in dieser Rangfolge und unter Verarbeitung von Varianten wie vim
, elvis
, xemacs
, usw.).
Dies war (sehr ärgerlich!) in defekt mksh
, ist aber auch in anderen pdksh
von abgeleiteten Shells immer noch der Fall.
Andere Shells bevorzugen bash
oder tcsh
verwenden standardmäßig den emacs
Bearbeitungsmodus, aber dieser kann auch durch die Konfigurationsdatei der Zeilenbearbeitungsbibliothek überschrieben werden.
Für diereadline
Bibliothek, die von bash
und vielen anderen Programmen verwendet wird. Die Konfigurationsdatei ist (oder eine in der Umgebungsvariable ~/.inputrc
angegebene Datei ) mit einem Fallback auf und die Einstellungen sind:INPUTRC
/etc/inputrc
set editing-mode vi
set editing-mode emacs
Für die von vielen BSD-Programmen verwendete Bibliothek editline
/ libedit
[1] lautet die Konfigurationsdatei üblicherweise~/.editrc
und die Einstellungen sind:
bind -v # for vi
bind -e # for emacs
[1] nicht zu verwechseln mit demlibeditline
Readline „work-alike“, das nur einen Emacs-Bearbeitungsmodus bereitstellt.