سؤال

أحاول الحصول على رمز "0 من النجاح ، غير صفري إذا خطأ" من Make in Vim. على وجه التحديد ، أنا في Ubuntu وأستخدم v:shell_error لا يعمل.

بعد الحفر والنظر في هذا السؤال، يبدو أنه بسبب الإعداد الخاص بي ، وهو

shellpipe=2>&1| tee

ال tee الأنابيب جعل الإخراج مرة أخرى في VIM. يبدو أن Shell يعيد رمز الخطأ من Tee إلى Vim وليس من Make. كيف أحصل على رمز خطأ Make's بدلاً من ذلك؟

هل كانت مفيدة؟

المحلول

يمكنك محاولة عمل وظيفة مخصصة لذلك. على سبيل المثال باستخدام :call system("make > make.out") تشغيل جعل إعادة توجيه الإخراج في ملف. بعد ذلك قم بتحميل ملف الخطأ باستخدام :cf make.out. لم أحاول ذلك بنفسي.

في النهاية ، نتائج make قد يتم فحصها ببساطة عن طريق اختبار ما إذا كانت النتيجة موجودة ، في نظام الملفات:

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

(هنا رمز "|" هو فاصل أمر VIM.) تعيين ذلك لاختصار لوحة المفاتيح سيؤدي إلى إزالة الحاجة إلى الكتابة.

ملاحظة: عادةً ما أحاول إنشاء برامجي لإنتاج أي تحذيرات ، لذلك لم أجد هذه المشكلة أبدًا. ما يؤدي راجع للشغل إلى حل آخر ممكن: ما عليك سوى إزالة التحذيرات (أو ببساطة خطوط الإخراج غير المرغوب فيها) باستخدام EG grep -v tabooword من الإخراج من خلال تجاوز 'makeprg'. ما هو موصوف بالفعل في المساعدة: :h 'makeprg'.

PPS لقد بدأت على vim ... شريطة أن تستخدم أيضا باش كقذيفة. هل حاولت إضافة إلى الخروج $ {pipestatus [0]} إلى shellpipe؟ على سبيل المثال:

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

اختبرت ذلك على ديبيان وعملت بالنسبة لي. :h 'shellpipe' للمزيد من.

نصائح أخرى

الشيء الوحيد الذي يمكن أن أفكر فيه حاليًا هو إنشاء نصين غلافين من أجل صنع و tee. أنا متأكد من أن هناك طريقة أسهل ، ولكن الآن قد تجرب هذا:

قم بإنشاء برنامج نصي لجعل:

#!/bin/bash

make $@
echo $? > ~/exit_code_cache

قم بإنشاء برنامج نصي لفتات Tee:

#!/bin/bash

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

استخدم Make الجديد :set makeprg=mymake وإعداد خاصتك shellpipe الذي يستخدم غلاف الإنطلاق الخاص بك (shellpipe=2>&1 | mytee).

لم يتم اختباره ، ولكن يجب أن تكون الفكرة واضحة. أتمنى أن يساعد ذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top