फ़ाइल आकार और प्रकार के आधार पर हाइलाइटिंग सिंटैक्स को अक्षम करें


16

मुझे अक्सर विभिन्न XML फ़ाइलों को विम के साथ संपादित करना पड़ता है, जो आकार में बेतहाशा भिन्न होता है - कॉन्फ़िगरेशन फ़ाइलों से कुछ हंड्रेड लाइनों से लेकर डेटा फ़ाइलों का उत्पादन 2GB तक के आकार के साथ। सिंटैक्स हाइलाइटिंग सक्षम होना निश्चित रूप से एक बहुत बुरा विचार है जब विशाल फ़ाइलों के साथ काम किया जाता है, इस प्रकार मैं इसे अक्षम करना चाहता हूं यदि फ़ाइल थ्रेशोल्ड से बड़ी है।

मैं autocommandसिंटैक्स हाइलाइटिंग को अक्षम करने के लिए सीधे काम करने के लिए इसे प्राप्त नहीं कर सका , क्योंकि जाहिरा तौर पर कमांड को निष्पादित किया जाता है जब शेल से विम शुरू करने से पहले सिंटैक्स को सक्षम किया जाता है:

" this autocmd has no effect except for the echo:
autocmd Filetype xml if getfsize(@%) > 1000000 | echom '!' | syntax off | endif

मुझे इसमें एक वर्कअराउंड मिला कि मैं सिंटैक्स हाइलाइटिंग को विश्व स्तर पर अक्षम कर सकता हूं, फिर इसे xml की तुलना में अन्य सभी फ़िलाटाइप्स के लिए फिर से चालू कर दूं, और फ़ाइल फ़ाइल थ्रेश से बड़ा नहीं होने पर इसे फ़िल्टाइप xml के लिए चालू करें:

syntax off
autocmd Filetype * syntax off
autocmd Filetype * if &ft != 'xml' | syntax enable | endif
autocmd Filetype xml if getfsize(@%) < 1000000 | syntax enable | endif

यह काम करने लगता है, लेकिन गलत लगता है और एक बार मैं असहनीय हो जाएगा, क्योंकि मैं इसे और अधिक filetypes और स्थितियों के लिए करना चाहता हूं। इसके अलावा, यह सभी बफ़र्स को प्रभावित करता है। विशिष्ट परिस्थितियों में एक बफ़र में सिंटैक्स हाइलाइटिंग को अक्षम करने का उचित तरीका क्या है?



हालांकि यह क्यू अच्छी तरह से लिखा गया है, यह मोटे तौर पर एक ही जमीन (वास्तव में, एक उपसमुच्चय) को कवर करता प्रतीत होता है: vi.stackexchange.com/questions/149/…
एंड्रयू

4
@AndrewFerrier मैं उस के खिलाफ बहस करूँगा। अन्य प्रश्न बड़ी फ़ाइलों को संभालने के सामान्य सुझावों के बारे में है। माइन एक दिए गए प्रतिबंधों के तहत पहेली के एक नहीं बल्कि विशिष्ट टुकड़े को लागू करने के बारे में है। बस उत्तरों की तुलना करें - दूसरे प्रश्न के उत्तर मुझे सिंटैक्स को बंद करने के लिए कहेंगे, लेकिन एक फ़ाइल प्रकार के लिए एक ही बफर में गतिशील रूप से कैसे करें। इस प्रकार यह मेरी अधिक विशिष्ट समस्या का समाधान नहीं करेगा। वे संबंधित हैं लेकिन डुप्लिकेट नहीं हैं क्योंकि वे अलग-अलग चीजों के लिए पूछते हैं और विभिन्न प्रतिक्रियाओं को जन्म देते हैं।
l4mpi

l4mpi, यह एक उचित बिंदु है, मैं भी filetype बात देखा नहीं था। बस आंशिक रूप से यहाँ नए बीटा के पानी का परीक्षण! मुद्दा लेना। मैं अपना डुप्लीकेट वोट वापस लूंगा।
एंड्रयू फेरियर

जवाबों:


11

इस टिप्पणी से derobert मुझे समाधान को जन्म दिया:

autocmd Filetype xml if getfsize(@%) > 1000000 | setlocal syntax=OFF | endif

यह केवल एक बफर में सिंटैक्स हाइलाइटिंग को मज़बूती से अक्षम करने के लिए लगता है।

autocmd BufReadPreएक रेड हेरिंग का एक सा था। संदर्भ syntax off में काम करता है, BufReadPreलेकिन संदर्भ में नहीं Filetype(और विश्व स्तर पर वाक्यविन्यास को अक्षम करता है); जबकि setlocal syntax=OFFकरता है नहीं में काम BufReadPreसंदर्भ लेकिन में काम करता है Filetypeसंदर्भ।


1

यह autocmd BufReadPre * if getfsize(expand("%")) > 10000000 | syntax off | endifवही है जो आपको चाहिए।


2
हम्म, यह सिंटैक्स हाइलाइटिंग को अक्षम करता है, लेकिन सभी बफ़र्स में, न केवल बड़ी फ़ाइल के साथ। इसके अलावा &ftइस संदर्भ में सेट नहीं किया जा रहा है इस प्रकार मुझे नहीं पता कि इसे केवल xml फ़ाइलों तक कैसे सीमित किया जाए। कोई विचार?
l4mpi

मुझे लगता है कि आप set syntax=OFFइसके बजाय चाहते हैं। (या कि setlocal होना चाहिए?)
derobert

आप शायद कोशिश करना चाहते हो syntax clearसकता है?
ध्रुव सागर

@derobert setlocal syntax=OFFकाम करता है, हालांकि इसके साथ नहीं BufReadPre *- मुझे इसके लिए ऑटोकॉमैंड को वापस बदलना पड़ा Filetype xml। लगता है जैसे कि यह जो काम है, जिसमें संदर्भों autocommand ... आदेश nontrivial है
l4mpi
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.