Dosya boyutuna ve türüne bağlı olarak sözdizimi vurgulamayı devre dışı bırak


16

Sıklıkla, birkaç hunded satır içeren yapılandırma dosyalarından 2GB'a kadar boyutlardaki üretim veri dosyalarına kadar çok çeşitli boyutlarda vim ile çeşitli XML dosyalarını düzenlemek zorundayım. Sözdizimi vurgulama etkin olması elbette çok büyük dosyaları ele alırken çok kötü bir fikir, bu yüzden dosya bir eşik daha büyükse devre dışı bırakmak istiyorum.

Kabuktan vim başlatılırken sözdizimi etkinleştirilmeden önceautocommand komut yürütüldüğünden, sözdizimi vurgulamayı devre dışı bırakmak için doğrudan kullanarak bunu çalıştıramadım :

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

Ben sözdizimi küresel vurgulama devre dışı bırakabilirsiniz, daha sonra xml dışındaki tüm dosya türleri için yeniden açın ve dosya eşik daha büyük değilse filetype xml için açın bir çözüm buldum:

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

Bu işe yarıyor gibi görünüyor, ancak yanlış geliyor ve bunu daha fazla dosya türü ve koşul için yapmak istediğimde yönetilemez hale gelecek. Ayrıca, tüm tamponları etkiler. Belirli koşullar altında bir arabellekte sözdizimi vurgulamayı devre dışı bırakmanın doğru yolu nedir?



Her ne kadar bu Q iyi yazılmış olsa da, bununla aynı zemini (aslında bir altkümeyi
Andrew Ferrier

4
@ AndrewFerrier Buna karşı çıkardım. Diğer soru, büyük dosyaları işlemek için genel ipuçları hakkında. Benimki bulmacanın belirli bir parçasını belirli bir kısıtlama seti altında uygulamakla ilgilidir . Sadece cevapları karşılaştırın - diğer sorunun cevapları sözdizimini kapatmamı söyleyecektir, ancak bunu tek bir dosya türü için tek bir arabellekte dinamik olarak nasıl yapacağımı söylemeyecektir. Böylece çok daha spesifik sorunumu çözmeyecek. Farklı şeyler ister ve farklı yanıtlara yol açtıklarından birbirleriyle ilişkilidir ancak kopya değildir.
l4mpi

l4mpi, bu adil bir nokta, ben de filetype şeyi görmedim. Sadece burada yeni beta sularını kısmen test! Alınan nokta. Yinelenen oyumu geri çekeceğim.
Andrew Ferrier

Yanıtlar:


11

Bu yorum, tarafından derobert çözümü götürdü:

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

Bu, yalnızca bir arabellekte sözdizimi vurgulamayı güvenilir bir şekilde devre dışı bırakıyor gibi görünüyor.

autocmd BufReadPreKırmızı ringa biraz oldu. bağlam syntax off içinde çalışır BufReadPreancak bağlamda çalışmaz Filetype(ve elbette sözdizimini global olarak devre dışı bırakır); iken setlocal syntax=OFFyaptığı değilBufReadPrebağlamında ancak çalışır Filetypebağlamda.


1

Bu autocmd BufReadPre * if getfsize(expand("%")) > 10000000 | syntax off | endifne ihtiyaç vardır.


2
Hmm, bu sözdizimi vurgulamayı devre dışı bırakır, ancak tüm arabelleklerde, yalnızca büyük dosyaya sahip olanlarda değil. Ayrıca &ftbu bağlamda ayarlanmış gibi görünmüyor, bu yüzden nasıl sadece xml dosyaları ile sınırlamak bilmiyorum. Herhangi bir fikir?
l4mpi

Bunun set syntax=OFFyerine istediğini düşünüyorum . (Yoksa setlocal olmalı mı?)
derobert

syntax clearbelki denemek isteyebilirsiniz ?
Dhruva Sagar

@ derobert setlocal syntax=OFFçalışır, her ne kadar olmasa da BufReadPre *- bunun için geri autocommand değiştirmek zorunda kaldı Filetype xml. Hangi komutların hangi komuta bağlamında çalıştığı önemsiz gibi görünüyor ...
l4mpi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.