Quando utilizzo:%! per eseguire il contenuto di un file attraverso un filtro e il filtro non riesce (restituisce un altro codice diverso da 0) e stampa un messaggio di errore su stderr I file vengono sostituiti con questo messaggio di errore. C'è un modo per dire a vim di saltare il filtro se il filtro restituisce un codice di stato che indica un errore e/o ignora l'output che il programma di filtro scrive su stderr?filtri vim e stdout/stderr
In alcuni casi è possibile sostituire il file con l'output del filtro, ma molto spesso questo comportamento è sbagliato. Ovviamente posso semplicemente annullare il filtro con un solo tasto ma non è ottimale.
Inoltre, ho un problema simile quando si scrive uno script Vim personalizzato per fare il filtro. Ho uno script che chiama un programma di filtro con system() e sostituisce il file nel buffer con il suo output ma non sembra essere un modo per rilevare se le righe restituite da system() dove sono scritte su stdout o su stderr . C'è un modo per distinguerli in vim script?
Naturalmente! Con ogni linguaggio di scripting "reale" non è affatto un problema. Non ci ho pensato. Anche se preferirei script vim se possibile, perché non voglio avere più dipendenze sul mio script del necessario. – ahe
Conosco solo un altro modo: usa 'system()', reindirizza lo stderr in un file temporaneo (o '/ dev/null'), salva stdout su qualche variabile e usa' v: shell_error' per determinare se un comando ha fallito prima buffer di sovrascrittura. Nota che i filtri ':!' Sostituiscono «!» Con il comando precedente e «%» con il nome file corrente mentre 'system()' no. – ZyX