Question

Je suis en train d'obtenir le code de retour « 0 de succès, en cas d'erreur non nul » de faire dans vim. Plus précisément, je suis sur Ubuntu et l'utilisation v:shell_error ne fonctionne pas.

Après avoir creusé autour et regarder cette question, il semble être à cause de mon cadre shellpipe, qui est

shellpipe=2>&1| tee

Les tuyaux de la marque tee sortie de nouveau dans vim. La coque est apparemment en le code d'erreur du tee au vim et non de faire. Comment puis-je obtenir le code d'erreur de faire à la place?

Était-ce utile?

La solution

Vous pouvez essayer de faire une fonction personnalisée pour cela. Par exemple. en utilisant la sortie de make redirigeant run :call system("make > make.out") dans un fichier. Après cette charge le fichier d'erreur en utilisant :cf make.out. Jamais essayé moi-même, cependant.

En fin de compte, les résultats de make pourraient aussi être simplement vérifié en testant si le résultat est là, dans le système de fichiers:

:make | if !filereadable("whatever-make-was-supposed-to-create") | throw "Make failed!!!" | endif

(ici le « | ». Symbole est le séparateur de commandes de vim). Attribution qui à un raccourci clavier supprimerait la nécessité de taper

P.S. J'essaie souvent de faire mes programmes pour produire aucun avertissement, donc je jamais vraiment tombé sur la question. Quel BTW conduit à une autre solution possible: il suffit de retirer les avertissements (ou simplement des lignes de sortie indésirables) en utilisant par exemple grep -v tabooword de la sortie de marque en remplaçant la 'makeprg'. Ce qui est effectivement décrit dans l'aide. :h 'makeprg'

P.P.S. Je suis mis à la VIM ... Pourvu que vous utilisez également bash comme shell. Est-ce que vous avez essayé d'ajouter à la sortie {$ de PIPESTATUS [0]} au shellpipe? .: par exemple

:set shellpipe=2>&1\ \|\ tee\ %s;exit\ \${PIPESTATUS[0]}

Juste testé que sur Debian et cela a fonctionné pour moi. :h 'shellpipe' plus.

Autres conseils

La seule chose que je peux penser actuellement est de créer deux scripts wrapper pour faire et tee. Je suis sûr qu'il ya un moyen plus facile, mais vous pourriez maintenant essayer ceci:

Créer un script d'emballage make:

#!/bin/bash

make $@
echo $? > ~/exit_code_cache

Créer un script d'emballage de départ:

#!/bin/bash

tee $@
return `cat ~/exit_code_cache` # (or do something else with the exit code)

Utilisez la nouvelle marque :set makeprg=mymake et configurer votre propre shellpipe qui utilise votre wrapper (tee shellpipe=2>&1 | mytee).

Il est pas testé, mais l'idée doit être claire. Espérons que cela aide.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top