Shells (zumindest was ich weiß) haben wirklich schlechte Befehlsbearbeitungsfunktionen.
Beispielsweise:
- Ich kann den Cursor nicht auf einen Punkt des Befehls richten.
- Ich kann im Befehl keinen Text auswählen und zurücksetzen / löschen / ersetzen.
Derzeit sind diese so ablenkend, dass ich Befehle mit gedit bearbeite, bevor ich sie in das Terminal einfüge.
Gibt es eine Lösung, die für diese gut ist?
command-line
bash
gnome-terminal
UniversallyUniqueID
quelle
quelle
Antworten:
Bash ist eigentlich ziemlich gut darin. Sie müssen nur die Verknüpfungen lernen. Zum Beispiel (im Standard-Emacs-Modus):
Und es gibt noch viel mehr. Lesen Sie, um
man readline
zu sehen, was noch verfügbar ist. Sie können verschiedene Verknüpfungen zuweisen, indem Sie sie einfügen~/.inputrc
. Um beispielsweise Ctrl+ Leftein Wort zurück und Ctrl+ Rightein Wort vorwärts zu bringen, fügen Sie Folgendes zu Ihrem~/.inputrc
:Um herauszufinden, was diese seltsamen Codes bedeuten, drücken Sie Ctrl+ Vund dann die Taste, die Sie verwenden möchten. Wenn Sie es mit Ctrl+ versuchen Right, werden Sie sehen
^[[1;5C
. Ersetzen Sie^[
durch\e
in~/.inputrc
.Vielleicht möchten Sie auch in andere Muscheln schauen. Beliebte "moderne", funktionsreiche Muscheln sind:
quelle
gnome-terminal
Sie dieESC
Taste verwenden, anstattALT
ein Wort vorwärts und rückwärts zu navigieren. . .. oder wechseln Sie zu einem Terminal, das Alt nicht als Anwendungsmenü verwendet. . . wie xterm oder sakuraSie können einen leeren oder teilweise eingegebenen Befehl in den Editor Ihrer Wahl bearbeiten, indem Sie
EDITOR
den Editor Ihrer Wahl aufrufen und CTRL+ X+ Eoder CTRL+ X/ CTRL+ drücken E, wodurch die aktuell bearbeitete Zeile geöffnet wirdEDITOR
;Wenn Sie beispielsweise auf einstellen
EDITOR
,gedit
werden CTRL+ X+ Eund CTRL+ X/ CTRL+ angezeigtE die aktuelle Zeile in Gedit geöffnet.Um diese eine dauerhafte Lösung zu machen, können Sie einstellen ,
EDITOR
in~/.bashrc
.Auf diese Weise können Sie den Befehl auch mit einem vollwertigen grafischen Texteditor bearbeiten. Um den bearbeiteten Befehl auszuführen, speichern und schließen Sie einfach das Dokument.
Dieselbe Funktion kann in Zsh aktiviert werden, indem Folgendes hinzugefügt wird
~/.zshrc
:quelle
fc
Befehl aufgerufen werden, wenn die Variable FCEDIT gesetzt ist. Gute Antwort !fc
öffnet jedoch den vorherigen Befehl (der in gewisser Weise sogar ordentlicher ist). Das wusste ich nicht, danke!Terminals verfügen selbst über keine Textbearbeitungsfunktionen. Terminals bieten einen Textbereich und verbinden die Tastatur mit etwas. Aber das, was Sie im Terminal ausführen, bestimmt, was es tun kann.
Shells wie diese
bash
sind normalerweise das erste, was Sie in einem Terminal ausführen können. Da Shells auf Befehlen basieren, können Sie nur den aktuellen Befehl bearbeiten. bash bietet im Vergleich zur Bourne-Shell eine hervorragende Befehlsbearbeitungcsh
oderksh
ist kaum etwas, mit dem Sie auch nur eine Kurzgeschichte bearbeiten möchten.Texteditoren sind einer der Befehle, die Sie in der Shell aufrufen können. Die führenden Beispiele sind Vim und Emacs .
vim
oderemacs
gibt Ihnen die Möglichkeit, fast alles zu bearbeiten. Beide enthalten integrierte Programmierumgebungen, um ihre Fähigkeiten auf jedes Problem auszudehnen, mit dem Sie konfrontiert sind.Die Lösung besteht also darin, besser zu verstehen, was diese Tools tun und tun sollen, und das richtige für den Job auszuwählen .
quelle
Normalerweise erlauben Terminals die Textauswahl mit der Maus, aber die Shell wird nicht darauf aufmerksam gemacht. Also leider weder
bash
,zsh
,fish
noches
können Maus-basierte Bearbeitung unterstützen. Ich denke, um dies zu tun, müssten sie mehr Kontrolle über das Terminal übernehmen.Allerdings (und das ist ein bisschen weit hergeholt) , wenn Sie öffnen Vim oder GVim, und geben Sie dann unter Verwendung von Shell - Kommandos:
Dann können Sie mit der Maus auf eine beliebige Stelle in der Zeile springen . (Sie müssen
:set mouse=a
zuerst, wenn dies noch nicht aktiviert ist.) Die Bearbeitungstasten in diesem Modus können mit angezeigt werden:help cmdline-editing
Vim hat auch einen ziemlich mächtigen Befehlsverlaufsmodus, der durch Drücken erreicht werden kann q:. Von dort aus können Sie mit den Befehlen im Normalmodus von Vim ziehen, löschen und einfügen. In diesem Modus können Sie die gewünschte Mausauswahl treffen und dann die gewünschte Funktion löschen (durch Drücken von d).
Eine wesentliche Einschränkung hierbei ist, dass Vim eine Live-Shell-Sitzung nicht tatsächlich am Laufen hält. Jeder Befehl, den Sie ausführen, wird in einem untergeordneten Prozess ausgeführt. Alle Änderungen, die der untergeordnete Prozess an Umgebungsvariablen oder Shell-Optionen vorgenommen hat, gehen verloren.
Sie können jedoch Umgebungsvariablen innerhalb des Vim-Prozesses ändern und diese über die Befehlszeile von Vim verwenden. Sie werden sogar in untergeordnete Prozesse exportiert:
Wenn Sie also so tun möchten, als wäre Vim tatsächlich eine seltsame Hülle, können Sie die erweiterten Bearbeitungsfunktionen nutzen! Der wahrscheinlich größte Nachteil ist, dass Sie jeden Befehl durch Eingabe von entweder
:!
oder starten müssenq:
Übrigens, wenn Sie die Ausgabe des Shell-Befehls in Ihren aktuellen Vim-Puffer übertragen möchten, können Sie dies folgendermaßen tun (aber Vorsicht, es wird Ihre aktuelle Zeile überlasten):
quelle