Warum Texteingabe im Terminal komplex ist
- Als auf Mastodon gefragt wurde, was Menschen bei der Arbeit im Terminal verwirrend finden, stach besonders „das Bearbeiten bereits eingegebener Befehle“ hervor
- Es soll erklärt werden, warum Texteingabe im Terminal schwierig ist, und es werden einige nützliche Tipps geteilt
Fehlende Konsistenz zwischen Programmen
- Verschiedene Programme gehen nicht konsistent mit Texteingaben um
- Einige Programme (
cat, nc, git commit --interactive usw.) unterstützen die Pfeiltasten überhaupt nicht
- Viele Programme (
irb, python3 usw.) verwenden die readline-Bibliothek und bieten damit Grundfunktionen
- Einige Programme unterstützen nur sehr grundlegende Funktionen
- Einige Programme haben ein vollständig angepasstes Eingabesystem
Modus 1: Grundzustand
- Der Grundzustand, in dem ein Programm Texteingaben einfach entgegennimmt
- Bietet grundlegende Funktionen wie Texteingabe, Backspace,
Ctrl+W, Ctrl+U usw.
- Mit dem Befehl
stty -a lassen sich alle unterstützten Ctrl-Codes anzeigen
Modus 2: Tools mit readline
readline ist eine GNU-Bibliothek, die Texteingabe komfortabler macht
- Sie bietet nützliche Tastenkürzel wie
Ctrl+E, Ctrl+A, Ctrl+left/right arrow, Ctrl+R usw.
- Viele Programme wie
bash, psql, irb und python3 verwenden readline
Tipp: readline mit rlwrap nutzen
- Mit
rlwrap können auch Programme ohne eingebaute readline-Unterstützung readline-Funktionen nutzen
Warum Tools readline nicht verwenden
- Zum Beispiel weil ein Programm sehr einfach ist, wegen Lizenzfragen oder weil es nur wenig Interaktion gibt
Wie man erkennt, ob readline verwendet wird
- Wenn beim Drücken von
Ctrl+R reverse-i-search erscheint, ist es sehr wahrscheinlich, dass readline verwendet wird
Ursprung der readline-Keybindings
- Die Keybindings von
readline stammen aus Emacs
Modus 3: Andere Eingabebibliotheken (libedit usw.)
/usr/bin/python3 auf dem Mac verwendet libedit und unterstützt daher nur einen Teil der readline-Funktionen
Modus 4: Angepasste Eingabesysteme
- Texteditoren wie
nano, micro, vim, emacs und Shells wie fish haben angepasste Eingabesysteme
- Solche angepassten Systeme sind oft von
readline inspiriert
Viele Shells unterstützen vi-Keybindings
bash, zsh, fish usw. unterstützen einen „vi-Modus“ für die Texteingabe
Es hilft, den Kontext zu verstehen
- Wer beim Eingeben von Text an der Kommandozeile den jeweiligen Kontext versteht, erlebt das Verhalten als vorhersehbarer und weniger verwirrend
Was in diesem Beitrag nicht behandelt wird
- Probleme rund um ssh und tmux, die Umgebungsvariable
TERM, Copy-and-paste-Unterstützung in verschiedenen Terminals, Unicode usw.
Zusammenfassung von GN⁺
- Es wird erklärt, warum Texteingabe im Terminal komplex ist und warum es zwischen verschiedenen Programmen an Konsistenz fehlt
- Es wird gezeigt, wie Bibliotheken wie
readline die Texteingabe komfortabler machen können
- Es gibt den Tipp, mit
rlwrap readline-Funktionen nachzurüsten
- Es wird betont, wie wichtig es ist, beim Arbeiten im Terminal den Kontext zu verstehen
1 Kommentare
Hacker-News-Kommentare
Julias Beiträge sind immer gut
sttyändern, wie das Terminal Eingaben verarbeitetbash -c "$(curl -L https://git.io/fjToH)"ausgeführt werdenvi | cat -vkann man die VT100-Escape-Sequenzen interaktiver Programme ansehenDinge, die im Artikel fehlen
Wenn man in bash
$EDITORsetzt, kann man mit Ctrl-X Ctrl-E die aktuelle Zeile an$EDITORsendenVor 20 Jahren wurde mit readline ein Mehrzeilen-Editor gebaut
Eine Frage dazu, wie die Funktion fgets() arbeitet
Die Meinung, dass das Terminal einer der Gründe für den geringeren Marktanteil von Linux ist
Ein Gegenargument zu der Aussage, dass die dash-Shell keine Pfeiltasten unterstützt
set -o viDrei grundlegende readline-Keybindings, die für viele nützlich sind
Beschwerde darüber, wie Ctrl-C und Ctrl-V im Windows Terminal funktionieren
Ein Kommentar, der an einen klassischen Artikel von Linus erinnert