Saya sering harus mengedit berbagai file XML dengan vim, yang ukurannya sangat bervariasi - dari file konfigurasi yang berisi beberapa baris hunded hingga file data produksi dengan ukuran hingga 2GB. Memiliki penyorotan sintaks yang diaktifkan tentu saja merupakan ide yang sangat buruk ketika berhadapan dengan file besar, jadi saya ingin menonaktifkannya jika file lebih besar dari ambang.
Saya tidak bisa menggunakan ini autocommand
secara langsung untuk menonaktifkan penyorotan sintaks, karena tampaknya perintah dijalankan sebelum sintaks diaktifkan ketika memulai vim dari shell:
" this autocmd has no effect except for the echo:
autocmd Filetype xml if getfsize(@%) > 1000000 | echom '!' | syntax off | endif
Saya menemukan solusi di mana saya dapat menonaktifkan penyorotan sintaksis secara global, kemudian nyalakan lagi untuk semua tipe file selain xml, dan nyalakan untuk filetype xml jika file tidak lebih besar dari ambang:
syntax off
autocmd Filetype * syntax off
autocmd Filetype * if &ft != 'xml' | syntax enable | endif
autocmd Filetype xml if getfsize(@%) < 1000000 | syntax enable | endif
Ini tampaknya berhasil, tetapi terasa salah dan akan menjadi tidak dapat dikelola setelah saya ingin melakukan ini untuk lebih banyak jenis dan kondisi. Selain itu, ini mempengaruhi semua buffer. Apa cara yang tepat untuk menonaktifkan penyorotan sintaksis dalam satu buffer dalam kondisi tertentu?
sumber
Jawaban:
Komentar dari derobert ini membawa saya ke solusi:
Ini tampaknya menonaktifkan penyorotan sintaksis dalam satu buffer saja.
Itu
autocmd BufReadPre
sedikit herring merah.syntax off
bekerja dalamBufReadPre
konteks tetapi tidak dalamFiletype
konteks (dan tentu saja menonaktifkan sintaksis secara global); sementarasetlocal syntax=OFF
tidak tidak bekerja dalamBufReadPre
konteks tetapi bekerja diFiletype
konteks.sumber
Ini
autocmd BufReadPre * if getfsize(expand("%")) > 10000000 | syntax off | endif
yang kamu butuhkan.sumber
&ft
sepertinya tidak diatur dalam konteks ini sehingga saya tidak tahu bagaimana membatasi hanya file xml. Ada ide?set syntax=OFF
sebaliknya. (Atau haruskah itu setlocal?)syntax clear
mungkin?setlocal syntax=OFF
bekerja, walaupun tidak denganBufReadPre *
- Saya harus mengubah perintah otomatis kembaliFiletype xml
untuk ini. Sepertinya itu bukan rahasia yang perintahnya berfungsi di mana konteks perintah otomatis ...