A menudo tengo que editar varios archivos XML con vim, que varían enormemente de tamaño, desde archivos de configuración que contienen algunas líneas ocultas hasta archivos de datos de producción con tamaños de hasta 2 GB. Tener el resaltado de sintaxis habilitado es, por supuesto, una muy mala idea cuando se trata de archivos grandes, por lo que quiero desactivarlo si el archivo es más grande que un umbral.
No pude hacer que esto funcione autocommanddirectamente para deshabilitar el resaltado de sintaxis, ya que aparentemente el comando se ejecuta antes de habilitar la sintaxis al iniciar vim desde el shell:
" this autocmd has no effect except for the echo:
autocmd Filetype xml if getfsize(@%) > 1000000 | echom '!' | syntax off | endif
Encontré una solución alternativa en la que puedo deshabilitar el resaltado de sintaxis a nivel mundial, luego volver a activarlo para todos los otros tipos de archivo que no sean xml, y activarlo para el tipo de archivo xml si el archivo no es mayor que el umbral:
syntax off
autocmd Filetype * syntax off
autocmd Filetype * if &ft != 'xml' | syntax enable | endif
autocmd Filetype xml if getfsize(@%) < 1000000 | syntax enable | endif
Esto parece funcionar, pero se siente mal y se volverá inmanejable una vez que quiera hacer esto para obtener más tipos de archivos y condiciones. Además, influye en todos los tampones. ¿Cuál es la forma correcta de deshabilitar el resaltado de sintaxis en un búfer en condiciones específicas?
fuente

Respuestas:
Este comentario de derobert me llevó a la solución:
Esto parece deshabilitar de manera confiable el resaltado de sintaxis en un solo búfer.
El
autocmd BufReadPreera un poco de arenque rojo.syntax offfunciona en elBufReadPrecontexto pero no en elFiletypecontexto (y, por supuesto, desactiva la sintaxis globalmente); mientras quesetlocal syntax=OFFlo hace no trabajo en elBufReadPrecontexto, pero que funciona en elFiletypecontexto.fuente
Esto
autocmd BufReadPre * if getfsize(expand("%")) > 10000000 | syntax off | endifes lo que necesitas.fuente
&ftparece no estar configurado en este contexto, por lo que no sé cómo restringirlo solo a archivos xml. ¿Algunas ideas?set syntax=OFFlugar. (¿O debería ser setlocal?)syntax clear, tal vez?setlocal syntax=OFFfunciona, aunque no conBufReadPre *- Tuve que cambiar el comando automático nuevamenteFiletype xmlpara esto. Parece que no es trivial qué comandos funcionan en qué contextos de