Мені часто доводиться редагувати різні файли 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
Це, здається, працює, але почувається неправильним і стане некерованим, як тільки я захочу це зробити для інших типів файлів та умов. Крім того, він впливає на всі буфери. Який правильний спосіб відключити виділення синтаксису в одному буфері за конкретних умов?