Geralmente, tenho que editar vários arquivos XML com o vim, que variam muito em tamanho - de arquivos de configuração contendo algumas linhas hunded a arquivos de dados de produção com tamanhos de até 2 GB. Ter o destaque da sintaxe ativado é, obviamente, uma péssima idéia ao lidar com arquivos enormes, portanto, desejo desativá-lo se o arquivo for maior que um limite.
Eu não consegui fazer isso funcionar usando autocommand
diretamente para desativar o realce da sintaxe, pois aparentemente o comando é executado antes da sintaxe ser ativada ao iniciar o vim a partir do shell:
" this autocmd has no effect except for the echo:
autocmd Filetype xml if getfsize(@%) > 1000000 | echom '!' | syntax off | endif
Encontrei uma solução alternativa em que posso desativar o realce de sintaxe globalmente, ativá-lo novamente para todos os outros tipos de arquivos que não xml e ativá-lo para o tipo de arquivo xml se o arquivo não for maior que o limite:
syntax off
autocmd Filetype * syntax off
autocmd Filetype * if &ft != 'xml' | syntax enable | endif
autocmd Filetype xml if getfsize(@%) < 1000000 | syntax enable | endif
Isso parece funcionar, mas parece errado e se tornará incontrolável quando eu quiser fazer isso para mais tipos de arquivos e condições. Além disso, ele influencia todos os buffers. Qual é a maneira correta de desativar o destaque de sintaxe em um buffer em condições específicas?