जब मैं उपयोग करता हूं:%! फ़िल्टर के माध्यम से फ़ाइल की सामग्री को चलाने के लिए और फ़िल्टर विफल रहता है (यह 0 से दूसरे कोड को वापस करता है) और stderr को एक त्रुटि संदेश प्रिंट करता है, मुझे अपनी फ़ाइल को इस त्रुटि संदेश से बदल दिया जाता है। फ़िल्टरिंग को छोड़ने के लिए विम को बताने का कोई तरीका है यदि फ़िल्टर एक स्टेटस कोड देता है जो एक त्रुटि इंगित करता है और/या आउटपुट को अनदेखा करता है तो फ़िल्टर प्रोग्राम stderr को लिखता है?विम फिल्टर और stdout/stderr
ऐसे मामले हैं जहां आप अपनी फ़ाइल फ़िल्टर के आउटपुट के साथ बदलना चाहते हैं लेकिन अक्सर यह व्यवहार गलत है। बेशक मैं सिर्फ एक कीप्रेस के साथ फ़िल्टरिंग पूर्ववत कर सकता हूं लेकिन यह इष्टतम नहीं है।
फ़िल्टरिंग करने के लिए कस्टम वीम स्क्रिप्ट लिखते समय भी मुझे एक ही समस्या है। मेरे पास एक स्क्रिप्ट है जो सिस्टम() के साथ फ़िल्टर प्रोग्राम को कॉल करती है और फ़ाइल को अपने आउटपुट के साथ बफर में बदल देती है लेकिन यह पता लगाने का एक तरीका प्रतीत नहीं होता है कि क्या सिस्टम() द्वारा लौटाई गई रेखाएं हैं जहां stdout या stderr को लिखा गया है । क्या उन्हें विम लिपि में अलग करने का कोई तरीका है?
बेशक! प्रत्येक "असली" पटकथा भाषा के साथ यह कोई समस्या नहीं है। इसके बारे में नहीं सोचा था। यद्यपि यदि संभव हो तो मैं विम स्क्रिप्ट पसंद करूंगा क्योंकि मैं अपनी स्क्रिप्ट पर आवश्यकतानुसार अधिक निर्भरता नहीं लेना चाहता हूं। – ahe
मुझे केवल एक और तरीका पता है: 'सिस्टम() 'का उपयोग करें, stderr को अस्थायी फ़ाइल (या'/dev/null') पर रीडायरेक्ट करें, कुछ चर के लिए stdout को सहेजें और यह निर्धारित करने के लिए' v: shell_error' का उपयोग करें कि कोई आदेश पहले विफल हुआ है या नहीं ओवरराइटिंग बफर। नोट, ''!' फिल्टर पिछले आदेश के साथ«! »को प्रतिस्थापित करता है और वर्तमान फ़ाइल नाम के साथ«% »'सिस्टम()' नहीं करता है। – ZyX