Wenn ich verwende:%! um den Inhalt einer Datei über einen Filter laufen zu lassen und der Filter schlägt fehl (er gibt einen anderen Code als 0 zurück) und druckt eine Fehlermeldung an stderr Ich bekomme meine Datei mit dieser Fehlermeldung ersetzt. Gibt es eine Möglichkeit, vim zu sagen, die Filterung zu überspringen, wenn der Filter einen Statuscode zurückgibt, der einen Fehler anzeigt und/oder Ausgaben ignoriert, die das Filterprogramm in stderr schreibt?vim filter und stdout/stderr
Es gibt Fälle, in denen Ihre Datei durch die Ausgabe des Filters ersetzt werden soll, aber meistens ist dieses Verhalten falsch. Natürlich kann ich die Filterung nur mit einem Tastendruck rückgängig machen, aber es ist nicht optimal.
Auch ich habe ein ähnliches Problem beim Schreiben eines benutzerdefinierten vim-Skript, um die Filterung zu tun. Ich habe ein Skript, das ein Filterprogramm mit system() aufruft und die Datei im Puffer mit seiner Ausgabe ersetzt, aber es scheint keine Möglichkeit zu geben, festzustellen, ob die von system() zurückgegebenen Zeilen in stdout oder stderr geschrieben wurden . Gibt es eine Möglichkeit, sie in vim script voneinander zu unterscheiden?
Natürlich! Mit jeder "echten" Skriptsprache ist das überhaupt kein Problem. Daran habe ich nicht gedacht. Obwohl ich vim Skript bevorzugen würde, wenn möglich, weil ich nicht mehr Abhängigkeiten zu meinem Skript als nötig haben möchte. – ahe
Ich kenne nur einen anderen Weg: benutze 'system()', leite stderr in eine temporäre Datei um (oder '/ dev/null'), speichere stdout in eine Variable und benutze' v: shell_error', um festzustellen, ob ein Befehl fehlgeschlagen ist Puffer überschreiben. Beachten Sie, dass ':!' -Filter «!» Durch den vorherigen Befehl und «%» durch den aktuellen Dateinamen ersetzen, während 'system()' dies nicht tut. – ZyX