एक विम ऑटोकॉमैंड से उत्पादन को दबाएं


13

मेरे पास अपने स्वर में परिभाषित एक ऑटोकॉमैंड है:

au BufWritePost * !./make.sh

स्क्रिप्ट 3 बार फाइल make.shसंकलित करती है .texऔर मैं नहीं चाहता कि आउटपुट प्रदर्शित हो।

क्या आउटपुट को दबाने का एक तरीका है?

मैंने कमांड silentसे पहले एक लाइन जोड़ने की कोशिश की au, लेकिन यह काम नहीं किया। मैंने भी बिना किसी सफलता के इस तरह की कोशिश की ।

जवाबों:


20

मौन पहले जाना चाहिए !./make.sh, न कि पहले ausilentपहले डालने का auमतलब है कि यह ऑटोकॉमैंड को चुपचाप पंजीकृत करेगा। इसके बजाय इस तरह दिखना चाहिए:

au BufWritePost * silent! !./make.sh

इस तरह के कमांड के साथ एक बाहरी कमांड चलाने के साथ एक मुद्दा यह :silentहै कि स्क्रीन फिर से नहीं आती है, आपको खाली स्क्रीन के साथ छोड़ देती है। हालाँकि, विम के पास एक कमांड है जो स्क्रीन को फिर से परिभाषित करता है, जिसका उपयोग इस तरह किया जा सकता है:

au BufWritePost * silent! execute "!./make.sh >/dev/null 2>&1" | redraw!

मेरे द्वारा निष्पादित कमांड का उपयोग करने का कारण यह है क्योंकि :!कमांड इसके बाद पाए गए किसी भी वर्ण का उपयोग करता है, जिसका अर्थ है कि मैं सिर्फ silent! !./make.sh | redraw!इसलिए नहीं कर सका क्योंकि बैश के बाद सभी वर्णों की व्याख्या करने की कोशिश करेंगे !

टिप्पणियाँ

ध्यान दें कि :silent!त्रुटि संदेशों को अनदेखा :silentकरता है , जबकि ऐसा नहीं करता है। इसके अलावा, इस >/dev/null 2>&1हिस्से के सभी उत्पादन को पुनर्निर्देशित करता !./make.shहै /dev/null। आप यहाँ bash में i / o पुनर्निर्देशन के बारे में अधिक पढ़ सकते हैं ।

प्रासंगिक सहायता विषय

  • :help :execute
  • :help :silent
  • :help :!
  • :help :bar

दूसरी कमांड ने काम किया, हालांकि यह अभी भी स्क्रीन पर आउटपुट प्रिंट करता है। इसके अलावा, स्क्रिप्ट के समाप्त होने पर मुझे Enter दबाने की आवश्यकता नहीं है, जो अच्छा है। लेकिन मुझे आश्चर्य है कि अगर आउटपुट को पूरी तरह से दबाने का कोई तरीका है।
आंद्रे हरमन बीज़र्रा

1
की जगह है execute "!./make.sh"के साथ execute "!./make.sh >/dev/null 2>&1"मदद? यह कमांड के सभी आउटपुट को रीडायरेक्ट करता है /dev/nullBash में पुनर्निर्देशन के बारे में अधिक जानकारी के लिए tldp.org/LDP/abs/html/io-redirection.html पढ़ें ।
एवरग्रीनट्री

मैंने उसके बारे में सोचा होता! यह काम करता हैं। धन्यवाद!
आंद्रे हरमन बीज़र्रा

7

आपके सीधे प्रश्न का उत्तर सिर्फ @EvergreenTree द्वारा पोस्ट किया गया है। हालाँकि मुझे ऐसा लगता है कि आप परियोजनाओं के निर्माण / संकलन / लाइनिंग के लिए विम बिलिन टूल को याद कर रहे हैं। सबसे विशेष रूप से :makeऔर त्वरित सूची।

उपयोग :makeकरने से हमें क्या मिलता है?

उपयोग :makeकरने से आप अपनी त्रुटियों को त्वरित सूची के रूप में ज्ञात सूची में एकत्र कर सकते हैं। क्विकफ़िक्स का उपयोग करके आप अपनी फ़ाइलों में त्रुटियों के बीच नेविगेट कर सकते हैं, इसलिए आप सही उस जगह पर जा रहे हैं जहां कंपाइलर त्रुटि (आसान सही?) कहता है।

:बनाना

रनिंग :makeकर कार्यक्रम क्रियान्वित करेगा, 'makeprg'। फिर आउटपुट को पार्स करें 'errorformat'और प्रत्येक प्रविष्टि को क्विकफिक्स सूची में डालें।

आमतौर पर कमांड 'makeprg'को डिफॉल्ट करता है makeजो एक चलाता है Makefile। हालाँकि आप अपने कमांड के 'makeprg'माध्यम से बदल सकते हैं :compilerया इसे सीधे सेट कर सकते हैं।

आप अतिरिक्त तर्क भी पास कर सकते हैं :make। जैसे:make clean

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

मूक बनाने के लिए एक सामान्य कस्टम कमांड है:

command -nargs=* -bar Smake silent make <args> <bar> cwindow

त्वरित सूची

जब आप :makeअपनी क्विकफ़िक्स सूची चलाते हैं , तो संकलक का उत्पादन होगा।

क्विकफ़िक्स सूची को नेविगेट करने के लिए निम्न कमांड का उपयोग करें।

  • :copen क्विकफ़िक्स विंडो खोलने के लिए
  • :cclose क्विकफ़िक्स विंडो को बंद करने के लिए
  • :cnext/ :cprevअगले / पिछले आइटम पर जाने के लिए
  • :ccवर्तमान त्रुटि के निचले भाग में प्रिंट करने या :cc 3इस उदाहरण 3 में एक विशिष्ट त्रुटि दिखाने के लिए

व्यक्तिगत तौर पर मैं टिम पोप का उपयोग अछूता QuickFix सूची नेविगेट करने के लिए प्लगइन।

:makeअपने आप और चुपचाप चलने के बारे में क्या ?

आप इसे अपने :autocmdजैसे ही कर सकते हैं ।

augroup auto_make
    autocmd!
    autocmd BufWritePost * silent make
    autocmd QuickFixCmdPost *make* cwindow
augroup END

एक बोनस के रूप में मैंने क्विकफिक्स विंडो खोलने के माध्यम से जोड़ा :cwindowअगर कोई त्रुटि मौजूद है।

नोट: BufWritePostऑटोकैड पर उस फ़ाइल पैटर्न के साथ अधिक विशिष्ट होना चाहिए ताकि संयुक्त राष्ट्र से संबंधित फाइलें न बनें।

वहाँ और भी ?!

यह विम के बिल्टइन कमांड के कुछ ही इस्तेमाल कर रहा है और साथ ही कुछ ऑटोोकैम का कायल भी है। बेशक प्लगइन्स और उपकरण हैं जो आपकी सहायता कर सकते हैं

  • Dispatch.vim का उपयोग :makeअतुल्यकालिक रूप से नौकरी चलाने के लिए किया जा सकता है ।
  • सिंथेटिक प्लगइन सिंटैक्स जाँच के बाद फ़ाइल :write
  • Ale.vim (एसिंक्रोनस लिंट इंजन) NeoVim और Vim 8 में लाइनिंग प्रदान करने के लिए एक प्लगइन है जब आप अपनी पाठ फ़ाइलों को संपादित करते हैं।
  • Unimpaired.vim QuickFix सूची का प्रबंधन करने के लिए आसान बनाता है।
  • सादा पुराने Makefiles। जब तक आपका स्वभाव ./script.shबहुत जटिल न हो, तब तक आप मेक यूज करना चाह सकते हैं। यह बाद में और अधिक कार्य कर सकता है और एक सामान्य निर्माण उपकरण है।
  • आप अधिक मदद के लिए खोज करने के लिए Vim विस्मयकारी का उपयोग कर सकते हैं जो मदद कर सकता है।

निष्कर्ष

व्यक्तिगत रूप से मैं एकीकृत करता हूं :makeऔर क्विकफिक्स को अपने वर्कफ्लो में शामिल करता हूं। मेरा मानना ​​है कि आपकी निर्माण प्रक्रिया के आउटपुट को कैप्चर करना और निवेश के लायक होने के लिए त्रुटियों को पकड़ना। एक अतिरिक्त बोनस के रूप में आप संभवत: क्विकफिक्स सूची के साथ अधिक सहज हो जाएंगे और सूची का उपयोग अन्य अनुप्रयोगों के लिए कर सकते हैं :grep

अधिक मदद के लिए देखें:

:h :make
:h quickfix
:h 'makeprg'
:h 'errorformat'
:h :compiler
:h :copen
:h :cwindow
:h :cnext
:h :cc

:makeजब मैं इस बारे में जवाब दे रहा था, तो मैंने सोचा था, लेकिन मैंने इसे शामिल नहीं किया। यह एक बेहतर विचार है कि आप सामने वाली चीजों का संकलन करें।
एवरग्रीनट्री

कैसे आटोक्मड को केवल एक निश्चित फ़ाइल पर मेकप चलाने के लिए परिवर्तित करें।
इब्न सईद
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.