Cuando uso:%! para ejecutar el contenido de un archivo a través de un filtro y el filtro falla (devuelve otro código que 0) e imprime un mensaje de error a stderr obtengo mi archivo reemplazado con este mensaje de error. ¿Hay alguna manera de decirle a vim que omita el filtrado si el filtro devuelve un código de estado que indica un error y/o ignora la salida que el programa de filtro escribe en stderr?vim filters y stdout/stderr
Hay casos en los que desea que su archivo se sustituya por la salida del filtro, pero la mayoría de las veces este comportamiento es incorrecto. Por supuesto, puedo deshacer el filtrado con una sola pulsación de tecla pero no es óptimo.
También tengo un problema similar al escribir una secuencia de comandos vim personalizada para hacer el filtrado. Tengo una secuencia de comandos que llama a un programa de filtro con system() y reemplaza el archivo en el búfer con su salida, pero no parece haber una manera de detectar si las líneas devueltas por system() fueron escritas en stdout o stderr . ¿Hay alguna manera de distinguirlos en el script vim?
¡Por supuesto! Con cada lenguaje de script "real" no es un problema en absoluto. No pensé en eso. Aunque preferiría el script vim si fuera posible porque no quiero tener más dependencias en mi script de lo necesario. – ahe
Sólo sé de otra manera: use 'system()', redireccione stderr a un archivo temporal (o '/ dev/null'), guarde stdout en alguna variable y use' v: shell_error' para determinar si un comando falló antes sobrescribiendo buffer Tenga en cuenta que los filtros ':!' Reemplazan «!» Por el comando anterior y «%» con el nombre de archivo actual, mientras que 'system()' no lo hace. – ZyX