Je dois souvent éditer divers fichiers XML avec vim, dont la taille varie énormément - des fichiers de configuration contenant quelques lignes hunded aux fichiers de données de production avec des tailles allant jusqu'à 2 Go. L'activation de la coloration syntaxique est bien sûr une très mauvaise idée lorsque vous traitez des fichiers volumineux, donc je veux la désactiver si le fichier est plus grand qu'un seuil.
Je n'ai pas pu faire fonctionner cela en utilisant autocommand
directement pour désactiver la mise en évidence de la syntaxe, car apparemment, la commande est exécutée avant que la syntaxe ne soit activée lors du démarrage de vim à partir du shell:
" this autocmd has no effect except for the echo:
autocmd Filetype xml if getfsize(@%) > 1000000 | echom '!' | syntax off | endif
J'ai trouvé une solution de contournement en ce sens que je peux désactiver la mise en évidence de la syntaxe à l'échelle mondiale, puis la réactiver pour tous les autres types de fichiers que xml et l'activer pour le type de fichier xml si le fichier n'est pas plus grand que le seuil:
syntax off
autocmd Filetype * syntax off
autocmd Filetype * if &ft != 'xml' | syntax enable | endif
autocmd Filetype xml if getfsize(@%) < 1000000 | syntax enable | endif
Cela semble fonctionner, mais se sent mal et deviendra ingérable une fois que je veux le faire pour plus de types de fichiers et de conditions. De plus, il influence tous les tampons. Quelle est la bonne façon de désactiver la mise en évidence de la syntaxe dans un tampon dans des conditions spécifiques?
Réponses:
Ce commentaire de derobert m'a conduit à la solution:
Cela semble désactiver de manière fiable la mise en évidence de la syntaxe dans un seul tampon.
Le
autocmd BufReadPre
était un peu d'un hareng saur.syntax off
fonctionne dans leBufReadPre
contexte mais pas dans leFiletype
contexte (et bien sûr désactive la syntaxe globalement); whilesetlocal syntax=OFF
ne fonctionne pas dans leBufReadPre
contexte mais fonctionne dans leFiletype
contexte.la source
Voilà
autocmd BufReadPre * if getfsize(expand("%")) > 10000000 | syntax off | endif
ce dont vous avez besoin.la source
&ft
ne semble pas être défini dans ce contexte, donc je ne sais pas comment le limiter aux fichiers xml uniquement. Des idées?set syntax=OFF
plutôt. (Ou cela devrait-il êtresyntax clear
alors peut-être?setlocal syntax=OFF
fonctionne, mais pas avecBufReadPre *
- j'ai dû changer la commande automatiqueFiletype xml
pour cela. Il semble que ce ne soit pas trivial, les commandes fonctionnent dans quels contextes de commande