एक त्वरित और गंदा समाधान (शुद्ध विम्स्क्रिप्ट में)
यह पृष्ठभूमि में एक प्रक्रिया शुरू कर सकता है:
:!slow_command_here > /tmp/output 2>&1 &
लेकिन विम को यह पता लगाने के लिए एक तरीका चाहिए कि प्रक्रिया कब पूरी हुई है, और कैसे, तो चलो एक मार्कर फ़ाइल का उपयोग करें:
:!(rm -f /tmp/finished; slow_command_here > /tmp/output 2>&1; echo "$?" > /tmp/finished) &
अब हम विम को हर बार जांचने के लिए कह सकते हैं कि क्या प्रक्रिया पूरी हो चुकी है:
:augroup WaitForCompletion
:autocmd!
:autocmd CursorHold * if filereadable('/tmp/finished') | exec "augroup WaitForCompletion" | exec "au!" | exec "augroup END" | echo "Process completed with exit code ".readfile('/tmp/finished')[0] | end
:augroup END
अरे यह सुंदर नहीं है, लेकिन यह काम करता है!
नुकसान
जब तक आप कर्सर नहीं ले जाते, दुर्भाग्य से ऊपर का ऑटोकैम ट्रिगर नहीं होगा। और यदि आप एक समय में एक से अधिक पृष्ठभूमि प्रक्रिया को चलाना चाहते थे, तो आपको उन फ़ाइलों में और ऑटोकैड समूह के नाम के लिए अद्वितीय आईडी जोड़ना होगा।
इसलिए यदि आप एक अतिरिक्त निर्भरता को संभाल सकते हैं, तो आप दूसरे उत्तर में उल्लिखित विम-प्रेषण प्लगइन की तरह आज़माए गए और परीक्षण किए गए समाधान का उपयोग करके बेहतर हो सकते हैं।
आउटपुट प्रदर्शित करना
यदि आप केवल बाहर निकलने के कोड के बजाय प्रक्रिया के आउटपुट को देखना चाहते हैं , तो अंतिम को इसके साथ बदलें :echo
silent botright pedit /tmp/output
यह पूर्वावलोकन विंडो खोल देगा। इसके बजाय क्विकफ़िक्स त्रुटि सूची का उपयोग करने के लिए:
silent cget /tmp/output | copen
क्विकफ़िक्स सूची आपको उपयोग करने में आसानी से त्रुटियों को नेविगेट करने देती है :cnext
। हालाँकि copen
, यह खुलने पर आपके कर्सर को क्विकफिक्स विंडो में ले जाता है, जो संभवतः आश्चर्यजनक / कष्टप्रद होगा।
(कि का संभावित हल के साथ QF विंडो खोलने के लिए होगा :copen
जब शुरू में प्रक्रिया शुरू करने से है, तो आप करेंगे नहीं अंत में इसे कहते हैं की जरूरत है।)