En Vim, ¿cuál es la mejor forma (portátil y rápida) de leer la salida de un comando de shell? Este resultado puede ser binario y, por lo tanto, contiene valores nulos y (no) tiene una nueva línea final que importa. Soluciones actuales que veo:La mejor forma de leer la salida del comando de shell
- Use
system()
. Problemas: no funciona con NULLs. - Use
:read !
. Problemas: no guardará la línea nueva posterior, intenta ser un formato de salida de detección inteligente (dos/unix/mac). - Uso
!
con redirección de archivo temporal, entoncesreadfile(, "b")
para leerlo. Problemas: dos llamadas para la opción fs,shellredir
también redirige stderr de manera predeterminada y debería ser menos portátil (aquí se menciona'shellredir'
porque es probable que se establezca en un valor válido). - Utilice
system()
y obtenga salidas de filtro a través dexxd
. Problemas: muy lento, menos portátil (no es equivalente a'shellredir'
para tuberías).
¿Alguna otra idea?
Usted puede tratar de ' = Sistema ('printf '' \ x00' '') '. No dará salida a nada, mientras que ':%! Printf '\ x00'' pondrá un solo NULL visto como'^@ 'en el búfer (gran problema:':%! Printf' \ x00 \ r \ n'' lo mismo). –
ZyX
El problema aquí es que no quiero tener dos funciones: "leer el comando en el búfer", normalmente alcanzable mediante "%!" Y "poner salida de comando en el archivo" y no puedo decir que nunca necesite más. Analógico a 'readfile()' es la solución más flexible en este caso. – ZyX
Sólo pensé en usar la compatibilidad con perl/python; ver respuesta para empezar – sehe