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 autocommand
directamente 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 BufReadPre
era un poco de arenque rojo.syntax off
funciona en elBufReadPre
contexto pero no en elFiletype
contexto (y, por supuesto, desactiva la sintaxis globalmente); mientras quesetlocal syntax=OFF
lo hace no trabajo en elBufReadPre
contexto, pero que funciona en elFiletype
contexto.fuente
Esto
autocmd BufReadPre * if getfsize(expand("%")) > 10000000 | syntax off | endif
es lo que necesitas.fuente
&ft
parece no estar configurado en este contexto, por lo que no sé cómo restringirlo solo a archivos xml. ¿Algunas ideas?set syntax=OFF
lugar. (¿O debería ser setlocal?)syntax clear
, tal vez?setlocal syntax=OFF
funciona, aunque no conBufReadPre *
- Tuve que cambiar el comando automático nuevamenteFiletype xml
para esto. Parece que no es trivial qué comandos funcionan en qué contextos de