2012-09-04 20 views
8

संक्षेप में, मुझे मेकफ़ाइल में पता होना चाहिए कि क्या वीआईएम से मेक किया जा रहा है या नहीं। क्या कोई निश्चित चर है (जैसे पर्यावरण या कुछ), कि वीआईएम एक विशिष्ट मूल्य पर सेट होगा?यदि मेकफ़ाइल में 'मेक' लागू किया गया है तो मेकफ़ाइल में कैसे जानें?

बैश से कहा जाता है, मैं (अपने आप को या) उपयोगकर्ता के लिए अद्भुत सामान के सभी प्रकार के कर सकता है, इस तरह के संदेशों देने के लिए के रूप में जो सबसिस्टम बनाया जा रहा है और प्रकाश डाला के रूप में:

कारण मैं इस की जरूरत है निम्नलिखित है त्रुटियों और चेतावनियां।

समस्या यह है कि, जब वीआईएम से बुलाया जाता है, तो त्रुटि संदेश पहले से ही कब्जा कर लिया जाता है और \x1b आदेश (रंग के लिए) को संदेश वीआईएम के लिए समझ में नहीं आता है। मैं वीआईएम में :make जारी होने पर मूल रूप से रंग अक्षम करना चाहता हूं।

भले ही मेकफ़ाइल इसे हल करने के बजाय, मैं अन्य समाधानों के लिए खुला हूं।

उत्तर

2

विम के अंदर, आप खुले गोले द्वारा विरासत में प्राप्त पर्यावरण चर सेट कर सकते हैं; जैसे

:let $INSIDE_VIM = 1 

यह सिर्फ के बारे में :make है, तो आप 'makeprg' निर्धारित करता है कि क्या शुरू हो जाती है में हेरफेर कर सकते हैं:

:set makeprg=export\ INSIDE_VIM=1;make 

तुम सिर्फ रंग के लिए भागने दृश्यों को लेकर चिंतित हैं, तो आप सिर्फ $TERM सेट कर सकते हैं कुछ ऐसा जो रंगों को समझ में नहीं आता है (dumb शायद?) और यदि रंग हार्ड कोडित नहीं है (दुर्भाग्यवश दुर्भाग्य से कई टूल में बड़ा है), तो इसे टर्मिनल सेटिंग का पालन करना चाहिए और भागने के दृश्यों को प्रिंट नहीं करना चाहिए।

+0

मेरे पास एक कॉन्फ़िगर है जो कहता है कि इसे बिल्ड का उपयोग करना चाहिए या नहीं। मेकफ़ाइल में चेक इस प्रकार कॉन्फ़िगर को ओवरराइड करता है। मैंने यह जांचने के बारे में सोचा नहीं था कि क्या टर्मिनल रंग दिखा सकता है या नहीं, हालांकि (इसे इंगित करने के लिए धन्यवाद)। फिर भी, शायद 'टीईआरएम' को बदलना इतना अच्छा नहीं है क्योंकि अन्य कार्यक्रम (उदाहरण के लिए खुद को बैश) इस पर भरोसा कर सकते हैं। – Shahbaz

+0

'$ INSIDE_VIM ​​= 1' हालांकि महान है! – Shahbaz

+0

जब तक आप 'xterm' को' dtterm' पर स्विच नहीं करते हैं, लेकिन टर्मिनल क्षमताओं को "डाउनग्रेड" करते हैं, तो यह ठीक होना चाहिए। लेकिन मैं टर्मिनल पर कोई विशेषज्ञ नहीं हूं, और शायद यह हर समय काम नहीं करेगा; बस पूर्णता के लिए जोड़ा गया। –

1

आप SOURCE="vim" make पर अपने vim बाध्यकारी को बदल सकते हैं, इसलिए आपके मेकफ़ाइल में $$SOURCE चर "vim" पर सेट है।

संपादित करें: मैं तुम्हें इस तथ्य vim में बाइंडिंग का उपयोग नहीं कर रहे हैं देखते हैं, आप में निम्न पंक्ति के साथ उनका उपयोग कर सकते अपने .vimrc (या /etc/vimrc) इस तरह:

:nmap <F5> <CR>SOURCE="vim" :make<CR> 

यह है कि तुम क्या करने के लिए F5 बाध्य होगा

+0

डबल '$' क्यों? साथ ही, क्या मैं इसके बजाय 'SOURCE =' vim "make' 'बना सकता हूं? – Shahbaz

+0

यह है कि मुझे अपने मेकफ़ाइल में एसओआरसीई वैरिएबल 'सब: इको "$$ SOURCE" की सामग्री मुद्रित करने की आवश्यकता है, जो मेरे आमंत्रण – jolivier

1

आप MYVIMRC या VIMRUNTIME पर्यावरण चर देख सकते हैं। मेरे जीएनयू/लिनक्स वितरण पर, SHLVL मूल्य बैश से 1 है और 2 जब vim के भीतर से उपयोग किया जाता है।

+0

के साथ मुद्रित है, ये अच्छे और आसान हैं। हालांकि, 'MYVIMRC' को परिभाषित नहीं किया जा सकता है यदि '.vimrc' मौजूद नहीं है। 'VIMRUNTIME' किसी भी उपयोगकर्ता द्वारा परिभाषित किया जा सकता है (हालांकि असंभव)। 'एसएचएलवीएल 'इतना मजबूत नहीं है, क्योंकि' विम 'स्तर 1 बैश से नहीं चलाया जा सकता है। मैं अन्य उत्तरों की प्रतीक्षा करूंगा, लेकिन अब तक 'VIMRUNTIME' सबसे विश्वसनीय समाधान प्रतीत होता है। – Shahbaz

4

मैं या तो मेकफ़ाइल को स्पष्ट रूप से बता दूंगा कि आप रंग नहीं चाहते हैं, या इसे फ़िल्टर नहीं करते हैं। यदि आप मेकफ़ाइल के अंदर अनुमान लगाने का प्रयास करते हैं, तो जब आप एक अलग संपादक, या खोल का उपयोग करते हैं, या अपने पर्यावरण को ट्विक करते हैं तो तोड़ने के लिए उत्तरदायी होता है। के बाद से इस makefile में स्पष्ट समाधान की आवश्यकता नहीं है

:set makeprg=make\ $*\ \\\|filter 

:

मेरी प्राथमिकता सिर्फ प्रिंट न हो सकने पात्रों को फिल्टर करने की होगी। हालांकि, आवश्यक फ़िल्टर स्वयं गैर-तुच्छ है: उदाहरण के लिए unix.stackexchange पर this question देखें।

वैकल्पिक रूप से, के रूप में पहले से ही सुझाव दिया, सबसे आसान तरीका स्पष्ट रूप से अपने makefile बताने के लिए है अपने मंगलाचरण के लिए एक चर जोड़ने के लिए:

:set makeprg=make\ NO_COLOUR=1 

या जो कुछ भी (makemakeprg के वर्तमान मूल्य होना चाहिए)।