Ich muss häufig verschiedene XML-Dateien mit vim bearbeiten, die sich in ihrer Größe stark unterscheiden - von Konfigurationsdateien mit einigen hundert Zeilen bis hin zu Produktionsdatendateien mit einer Größe von bis zu 2 GB. Die Syntax-Hervorhebung zu aktivieren ist natürlich eine sehr schlechte Idee, wenn es um große Dateien geht. Daher möchte ich sie deaktivieren, wenn die Datei größer als ein Schwellenwert ist.
Ich konnte dies nicht autocommand
direkt zum Deaktivieren der Syntaxhervorhebung verwenden, da der Befehl anscheinend ausgeführt wird, bevor die Syntax aktiviert wird, wenn vim von der Shell aus gestartet wird:
" this autocmd has no effect except for the echo:
autocmd Filetype xml if getfsize(@%) > 1000000 | echom '!' | syntax off | endif
Ich habe eine Problemumgehung gefunden, indem ich die Syntaxhervorhebung global deaktivieren und sie dann für alle anderen Dateitypen als xml wieder aktivieren und für den Dateityp xml aktivieren kann, wenn die Datei nicht größer als der Schwellenwert ist:
syntax off
autocmd Filetype * syntax off
autocmd Filetype * if &ft != 'xml' | syntax enable | endif
autocmd Filetype xml if getfsize(@%) < 1000000 | syntax enable | endif
Dies scheint zu funktionieren, fühlt sich aber falsch an und wird nicht mehr zu handhaben sein, wenn ich dies für mehr Dateitypen und Bedingungen tun möchte. Außerdem beeinflusst es alle Puffer. Wie kann die Syntaxhervorhebung in einem Puffer unter bestimmten Bedingungen ordnungsgemäß deaktiviert werden?
quelle
Antworten:
Dieser Kommentar von derobert führte mich zur Lösung:
Dies scheint die Syntaxhervorhebung in nur einem Puffer zuverlässig zu deaktivieren.
Das
autocmd BufReadPre
war ein bisschen wie ein roter Hering.syntax off
funktioniert imBufReadPre
Kontext, aber nicht imFiletype
Kontext (und deaktiviert natürlich die Syntax global); whilesetlocal syntax=OFF
funktioniert nicht imBufReadPre
Kontext, sondern imFiletype
Kontext.quelle
Das
autocmd BufReadPre * if getfsize(expand("%")) > 10000000 | syntax off | endif
ist was du brauchst.quelle
&ft
scheint in diesem Zusammenhang nicht festgelegt zu sein, so dass ich nicht weiß, wie ich es nur auf XML-Dateien beschränken kann. Irgendwelche Ideen?set syntax=OFF
stattdessen. (Oder sollte das setlocal sein?)syntax clear
dann vielleicht?setlocal syntax=OFF
funktioniert, wenn auch nicht mitBufReadPre *
- ich musste dafür den autocommand wieder auf umstellenFiletype xml
. Scheint , wie es nicht trivial ist , das Werk , in dem Befehl Kontexte automatischen Befehl ...