In Vim, qual è il modo migliore (portatile e veloce) per leggere l'output di un comando shell? Questo output può essere binario e quindi contenere valori null e (non) avere newline finale che conta. Soluzioni attuali che vedo:Il modo migliore per leggere l'output del comando shell
- Utilizzare
system()
. Problemi: non funziona con NULL. - Utilizzare
:read !
. Problemi: non salverà newline finale, cerca di essere intelligente nel rilevamento del formato di output (dos/unix/mac). - Utilizzare
!
con il reindirizzamento sul file temporaneo, quindireadfile(, "b")
per leggerlo. Problemi: due chiamate per l'opzione fs,shellredir
reindirizza lo stderr di default e dovrebbe essere meno portabile ('shellredir'
è menzionato qui perché è probabile che sia impostato su un valore valido). - Utilizzare
system()
e filtrare le uscite tramitexxd
. Problemi: molto lento, meno trasportabile (nessun equivalente di'shellredir'
per i tubi).
Altre idee?
si può provare ' = sistema ('printf '' \ x00' '') '. Non uscirà nulla, mentre ':%! Printf '\ x00'' metterà il singolo NULL visto come'^@ 'nel buffer (grosso problema:':%! Printf' \ x00 \ r \ n'' non lo stesso). –
ZyX
Il problema è che non voglio avere due funzioni: "legge il comando nel buffer", normalmente ottenibile da "%!" E "metti l'output del comando nel file" e non posso dire che non avrò mai più bisogno. Analog to 'readfile()' è la soluzione più flessibile in questo caso. – ZyX
Ho appena pensato di usare il supporto perl/python; vedere la risposta per l'antipasto – sehe