Terminal mit Schaltfläche „Letztes wiederholen“

Terminal mit Schaltfläche „Letztes wiederholen“

Ich kompiliere oft Sachen und wiederhole daher immer wieder denselben Befehl. Ich möchte also von meinem „visuellen Gedächtnis“ profitieren und eine Art „Letzten Befehl wiederholen“-Schaltfläche an einem Terminal anbringen. Genauer gesagt sehe ich das so:

  • Mein „spezielles“ Terminal wäre wie ein Standard-Terminalemulator, mit einer zusätzlichen Eingabezeile am unteren Ende, an die eine Schaltfläche „Ausführen“ angeschlossen wäre. Durch Klicken auf die Schaltfläche wird der Befehl ausgeführtohnees löschen.
  • Vielleicht könnte sogar eine beliebige Anzahl solcher Befehle gestapelt werden (da ich oft zwischen 2 oder 3 Befehlen wechseln muss).

Ich weiß, dass ich den letzten Befehl einfach Entermit der Tastatur wiederholen kann, aber oft vergesse ich, dass ich gerade einen anderen Befehl eingeben musste (um etwas zu reparieren oder was auch immer), sodass der richtige Befehl nicht aus dem Verlauf angezeigt wird. Anstatt also reflexartig zu reagieren, muss ich den Befehl tatsächlich lesen (zumindest überfliegen), bevor ich die Eingabetaste drücke.

Gibt es so ein Gerät irgendwo? Ich verwende oft mehrere Terminals, um sicherzustellen, dass jedes immer den „richtigen“ Befehl als letzten hat, aber meine Alt+ Tab-Fähigkeiten führen dazu, dass ich normalerweise zum falschen Fenster gehe. Und ich brauche Terminalinformationen wie die Umgebung und cwd, also kann ich nicht einfach versuchen, sie in meinen Code-Editor zu „integrieren“. Ich meine, die Verwendung von Alt+ F2und dann Enterwürde nicht funktionieren (da ich auch die Ausgabe vom Terminal lesen muss). Ich möchte einfach das Beste aus Tastatur und visuellem Speicher (über Klicks) gleichzeitig nutzen können.

Antwort1

Ich denke, dass die Verlaufserweiterung hier sehr hilfreich sein könnte. Wenn Sie beispielsweise Folgendes eingeben, !pwird der letzte Befehl ausgeführt, der mit „p“ beginnt. Ebenso !viwird der letzte Befehl ausgeführt, der mit „vi“ beginnt, und so weiter. Weitere InformationenHier. Wenn Sie nicht sicher sind, welcher davon der letzte war, können Sie die Shell-Option histverify( shopt -s histverify) setzen, sodass Sie den Befehl noch bearbeiten (oder prüfen) können, bevor Sie ihn ausführen. Mehr dazuHier.

Alternativ können Sie die Suchfunktion im Verlauf verwenden. Drücken Sie in Bash Ctrl+Rund geben Sie den Befehl ein, den Sie im Verlauf suchen möchten (beginnend mit dem aktuellsten, der den Kriterien entspricht). Wenn Sie Ctrl+Rwiederholt darauf drücken, werden ältere Befehle angezeigt, die Ihren Kriterien entsprechen. Weitere InformationenHierUndHier

Wenn Sie möchten, können Sie die inputrc Ihres Readline-Objekts so ändern, dass die Auf-/Ab-Pfeile die Verlaufssuche für Sie durchführen. Weitere InformationenHierUndHier.

Antwort2

Schauen Sie sich die Verlaufsfunktion Ihrer Shell an. In meinem zsh:

!!

wiederholt den letzten Befehl.

Geben Sie ein history, um die letzten Einträge anzuzeigen.

So erhalten Sie den gewünschten Puffer in der Shell:

man zshzle

oder

man readline

Sie können die Vervollständigungen auch mit der Tabulatortaste erweitern

make long_target
ls some_path
...
make l<TAB> # prints 'make long_target' without running it

Verwenden Sie Platzhalter, Erweiterungen … kein Teil Ihres Anwendungsfalls liegt außerhalb dieser Funktionalität.

Antwort3

Mit + können zshSie genau das tun . Geben Sie einen Befehl ein und drücken Sie dann + statt . Der Befehl wird ausgeführt und derselbe Befehl wird nach Abschluss des Befehls im Zeilenpuffer angezeigt.EscAEscAEnter

Antwort4

Es sieht so aus, als bräuchten Sie eine ganz einfache Antwort. Da Sie Alt+ erwähnt haben Tab, gehe ich davon aus, dass Sie (X)Windows verwenden. Sie markieren den Befehl mit der Maus, bevor Sie die Eingabetaste drücken. Beim Markieren wird er automatisch in die Zwischenablage kopiert. Um ihn einzufügen, drücken Sie die mittlere Maustaste (Scrollrad) oder geben Sie Shift+ ein Insert.

verwandte Informationen