विम सभी filetypes EXCEPT पर ऑटोकैमड चलाते हैं


81

मेरे पास एक विम ऑटोकैम है जो लिखने से पहले फाइलों में ट्रेसिंग व्हाट्सएप को हटा देता है। मैं इस समय का लगभग 100% चाहता हूं, लेकिन कुछ फिल्म्स हैं जो मैं इसे अक्षम करना चाहता हूं। पारंपरिक ज्ञान उन फ़िल्टरों को सूचीबद्ध करना है जिन्हें आप कॉमा से अलग की गई सूची में एक ऑटोकैड के खिलाफ चलाना चाहते हैं, जैसे:

autocmd BufWritePre *.rb, *.js, *.pl

लेकिन इस मामले में यह महत्वपूर्ण होगा।

वहाँ एक तरीका है सभी फाइलों के खिलाफ एक स्वतः पूर्ण पैटर्न से मेल खाता है जो पैटर्न से मेल खाते हैं? मैं डॉक्स में नॉट मैचर के बराबर नहीं मिल सकता।

जवाबों:


66

*.rbएक फ़ाइल प्रकार नहीं है। यह एक फाइल पैटर्न है। rubyफ़िलेपाइप है और यहां तक ​​कि उन फ़ाइलों पर भी सेट किया जा सकता है जिनके पास .rbएक्सटेंशन नहीं है । तो, आप जो सबसे अधिक संभावना चाहते हैं वह एक ऐसा फ़ंक्शन है जो आपके ऑटोकैड दोनों को फ़िलिप के लिए चेक करता है जिस पर कार्रवाई नहीं की जानी चाहिए और व्हाट्सएप को बंद कर देना चाहिए।

fun! StripTrailingWhitespace()
    " Don't strip on these filetypes
    if &ft =~ 'ruby\|javascript\|perl'
        return
    endif
    %s/\s\+$//e
endfun

autocmd BufWritePre * call StripTrailingWhitespace()

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

fun! StripTrailingWhitespace()
    " Only strip if the b:noStripeWhitespace variable isn't set
    if exists('b:noStripWhitespace')
        return
    endif
    %s/\s\+$//e
endfun

autocmd BufWritePre * call StripTrailingWhitespace()
autocmd FileType ruby,javascript,perl let b:noStripWhitespace=1

1
ठीक है, मैं एक ऐसे पैटर्न की उम्मीद कर रहा था जो कुछ फ़ाइल एक्सटेंशनों को बाहर कर देगा और निश्चित रूप से मेरे विवरण में शर्तों का दुरुपयोग करेगा। जब मैं एक-लाइनर के लिए उम्मीद कर रहा था, तो एक फ़ंक्शन में तर्क को लपेटना और इसे कॉल करना बहुत जर्जर नहीं है। धन्यवाद!
jerodsanto

यदि आप अपने vim config को अधिक मोड्यूलर रखना चाहते हैं, तो आप let b:noStripWhitespaceफ़ाइल को प्लगइन प्लगइन सेक्शन में फाइलों में जोड़ सकते हैं । GIT के हिटिंग के लिए अनुगामी व्हॉट्सएप निष्कासन को अक्षम करने के लिए Fx, लाइन को जोड़ें ~/.vim/ftplugin/gitcommit.vim
flyingdutchman

58

एक लाइन रास्ता का एक और विकल्प:

let blacklist = ['rb', 'js', 'pl']
autocmd BufWritePre * if index(blacklist, &ft) < 0 | do somthing you like

फिर आप ब्लैक लिस्ट में उन लोगों को छोड़कर कुछ ऐसा कर सकते हैं, जिन्हें आप सभी फाइलपेट्स के लिए पसंद करते हैं।


15

सबसे आसान तरीका यह होगा कि किसी एक फ़ाइल टाइप को सही करने के लिए स्थानीय वैरिएबल सेट किया जाए। फिर ऑटोमैकोनैंड सेट करें यदि वह चर गलत है (यदि सब कुछ के लिए सेट किया गया है) या यदि यह बिल्कुल मौजूद है (इसे पूर्व निर्धारित करने की आवश्यकता नहीं है)।

autocmd BufWritePre *.foo let b:foo=true

if !exists("b:foo")
    autocmd ...
endif

टिप्पणी के आधार पर परिवर्तनशील उपसर्ग


1

यह Syntaxऑटोकॉमैंड्स के लिए काम करता है , जहां पैटर्न ( <match>) सिर्फ फिलाटाइप है। यह किसी भी rstफाइल को बाहर करता है:

au Syntax *\(^rst\)\@<! …

1

हमारी .vimrc कॉन्फ़िगरेशन फ़ाइल केवल एक बार स्टार्टअप पर चलती है। इसलिए यदि आप इस समय एक इम्तिहान देते हैं, तो यह काम नहीं करेगा, क्योंकि कोई भी अजगर फ़ाइल वर्तमान में संपादित नहीं की जा रही है।

लेकिन आप एक स्वचालित व्यवहार सेट करने के लिए .vimrc का उपयोग कर सकते हैं: कुछ ऐसा जो विम हर बार यह एक विशेष स्थिति का सामना करता है। स्थिति आपके मामले में हो सकती है: "एक नई फ़ाइल का संपादन किया जा रहा है, और इसका फ़ाइल प्रकार 'अजगर' है।" देखें: ज: औ

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