Lorsque j'utilise:%! pour exécuter le contenu d'un fichier à travers un filtre et le filtre échoue (il renvoie un autre code que 0) et imprime un message d'erreur à stderr Je reçois mon fichier remplacé par ce message d'erreur. Existe-t-il un moyen d'indiquer à vim d'ignorer le filtrage si le filtre renvoie un code d'état qui indique une erreur et/ou ignore la sortie que le programme de filtre écrit sur stderr?Filtres vim et stdout/stderr
Il y a des cas où vous voulez que votre fichier soit remplacé par la sortie du filtre mais le plus souvent, ce comportement est incorrect. Bien sûr, je peux tout simplement annuler le filtrage avec une seule touche, mais ce n'est pas optimal.
J'ai également un problème similaire lors de l'écriture d'un script vim personnalisé pour effectuer le filtrage. J'ai un script qui appelle un programme de filtrage avec system() et remplace le fichier dans le buffer par sa sortie mais il ne semble pas y avoir un moyen de détecter si les lignes retournées par system() ont été écrites sur stdout ou sur stderr . Y a-t-il un moyen de les différencier dans un script vim?
Bien sûr! Avec chaque "vrai" langage de script, ce n'est pas un problème du tout. N'a pas pensé à ça. Bien que je préférerais vim script si possible parce que je ne veux pas avoir plus de dépendances sur mon script que nécessaire. – ahe
Je ne connais qu'une autre façon: utiliser 'system()', rediriger stderr vers un fichier temporaire (ou '/ dev/null'), sauvegarder stdout dans une variable et utiliser' v: shell_error' pour déterminer si une commande a échoué avant tampon d'écrasement. Notez que les filtres ':!' Remplacent «!» Par la commande précédente et «%» par le nom de fichier actuel, alors que 'system()' ne le fait pas. – ZyX