Мне часто приходится редактировать различные XML-файлы с помощью vim, которые сильно различаются по размеру - от файлов конфигурации, содержащих несколько строк, до файлов рабочих данных размером до 2 ГБ. Включение подсветки синтаксиса, конечно, очень плохая идея при работе с большими файлами, поэтому я хочу отключить его, если файл больше порога.
Я не мог заставить это работать, используя autocommand
напрямую, чтобы отключить подсветку синтаксиса, так как, очевидно, команда выполняется перед включением синтаксиса при запуске vim из оболочки:
" 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
Кажется, это работает, но кажется неправильным и станет неуправляемым, когда я захочу сделать это для большего количества типов файлов и условий. Кроме того, это влияет на все буферы. Как правильно отключить подсветку синтаксиса в одном буфере при определенных условиях?