Wie kann ich fc abbrechen, ohne den Befehl auszuführen?

13

Der Befehl fc ermöglicht die visuelle Bearbeitung des vorherigen Befehls. Wie kann ich verhindern, dass der Befehl ausgeführt wird, wenn ich es mir im Editor anders überlege? Geben Sie in vim q! oder q beide führen dazu, dass der Befehl ausgeführt wird und STRG-C auch nicht funktioniert. Ist die einzige Möglichkeit, den Befehl im Editor und dann wq zu löschen?

Dekuser
quelle

Antworten:

16

Von vi aus können Sie :cqeingeben, um ohne Speichern und mit einem Rückkehrcode ungleich Null zu beenden. In diesem Fall wird der Befehl nicht wiederholt.

Alternativ können Sie normalerweise den Editor ctrl-zanhalten, mit dem Sie zur Shell zurückkehren, ohne den Befehl zu wiederholen. Sie müssen fgden Editor noch neu starten, aber die tmp-Datei ist nicht mehr vorhanden, sodass Sie den Editor sicher beenden können. Oder Sie können kill -9 %diesen suspendierten Editor.

Ich stimme zu, es könnte einfacher sein. Natürlich können Sie Zeilen innerhalb von Bash jederzeit mit den Befehlen vi oder emacs bearbeiten.

meuh
quelle
vi hat keinen Befehl ": cq". Haben Sie gerne ": q!" Eingegeben?
schily
@schily sorry, von vi habe ich vim angenommen. Sie können über vim cqin Quickfix lesen .
Meuh
Leider ist vim nicht POSIX-kompatibel (neben Verbesserungen gibt es Abweichungen). Für eine allgemeine Hilfe ist es normalerweise eine gute Idee, sich nicht auf lokale oder herstellerspezifische Verbesserungen zu verlassen. Übrigens: q! ist ausreichend, da in diesem Fall ein POSIX vi beendet wird! = 0.
schily
@schily Abhängig davon, ob vim installiert ist, ist es wahrscheinlich in den meisten Fällen sicher, und in diesem Fall hat der Fragesteller ausdrücklich gesagt, q!dass es für sie nicht funktioniert hat
Michael Mrozek
2
Dies liegt daran, dass kein Fehler aufgetreten ist und der Exit-Code daher 0 ist. In vi wird Folgendes eingegeben: c (führt zu einer unzulässigen Befehlsnachricht) und anschließend: q! und der gespeicherte Fehler führt zu einem Exit-Code! = 0. Dies funktioniert jedoch nicht in vim. Meine vorherige Annahme, dass: q! führt immer zu einem Exit-Code! = 0 war falsch.
schily
3

Möglicherweise ist es einfacher, sich daran zu erinnern, den Befehl zu löschen (dd sollte es tun) und zu beenden ( ZZoder eine andere Möglichkeit, das Speichern zu beenden). IMHO, :cqist ziemlich arkan.

Andrzej Wąsowski
quelle