In Vim, Was ist die beste (portable und schnelle) Möglichkeit, die Ausgabe eines Shell-Befehls zu lesen? Diese Ausgabe kann binär sein und somit Nullen enthalten und (nicht) einen abschließenden Zeilenumbruch haben, was von Bedeutung ist. Aktuelle Lösungen sehe ich:
system()
. Probleme: funktioniert nicht mit NULL. :read !
. Probleme: speichert keine abschließenden Zeilenumbrüche, versucht, das Ausgabeformat smart (dos / unix / mac) zu erkennen. !
mit Umleitung zu temporärer Datei, dann readfile(, "b")
, um es zu lesen. Probleme: zwei Aufrufe für fs, shellredir
Option leitet stderr auch standardmäßig um und es sollte weniger portierbar sein ( 'shellredir'
wird hier erwähnt, weil es wahrscheinlich auf einen gültigen Wert gesetzt wird). system()
und filtern Sie die Ausgaben über xxd
. Probleme: sehr langsam, am wenigsten portabel (kein Äquivalent von 'shellredir'
für Pipes). Irgendwelche anderen Ideen?
Sie verwenden einen text -Editor. Wenn Sie sich für NULs, Trailing-EOLs und (möglicherweise) widersprüchliche Codierungen interessieren, müssen Sie trotzdem einen Hex-Editor verwenden?
Wenn ich diese Kontrolle über meine Operationen brauche, benutze ich die xxd-Route tatsächlich mit
%Vor%Eine nette Option, die Sie zu vermissen scheinen, ist der Einfügemodus Ausdruckregister Einfügung:
C-r
ein=system('ls -l')
Geben Sie
Dies ist vielleicht schlauer / weniger aufdringlich in Sachen Zeichencodierung, aber Sie könnten es versuchen, wenn es Ihnen wichtig genug ist.
Oder Sie können die Perl- oder Python-Unterstützung verwenden, um popen
Grobe Idee:
%Vor%Tags und Links shell vim shellexecute