Die beste Möglichkeit, die Ausgabe des Shell-Befehls zu lesen

8

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:

  1. Verwende system() . Probleme: funktioniert nicht mit NULL.
  2. Verwende :read ! . Probleme: speichert keine abschließenden Zeilenumbrüche, versucht, das Ausgabeformat smart (dos / unix / mac) zu erkennen.
  3. Verwenden Sie ! 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).
  4. Verwenden Sie system() und filtern Sie die Ausgaben über xxd . Probleme: sehr langsam, am wenigsten portabel (kein Äquivalent von 'shellredir' für Pipes).

Irgendwelche anderen Ideen?

    
ZyX 05.02.2012, 09:43
quelle

1 Antwort

4

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 =system('ls -l') Geben Sie

ein

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

effektiv zu verwenden

Grobe Idee:

%Vor%     
sehe 06.02.2012, 11:00
quelle

Tags und Links