Questo potrebbe essere un problema con il sistema di vim per riconoscere e quindi evidenziare "parole chiave" sintattiche che non ottengono un contesto sufficiente per riconoscere le parole chiave.
I concetti di base del sistema di sintassi di Vim (trovare e etichettare gli elementi di sintassi di base) sono spiegati in :h usr_44
Fondamentalmente vim usa regex per riconoscere gli elementi sintattici in un file, una volta identificati, quindi vengono applicate le regole di evidenziazione per colorare quei costrutti di codice, (cioè per fare "evidenziazione della sintassi"), ma come spiegato in :h 44.10
vim non inizia ad analizzare dal all'inizio del file, inizia un numero di righe (ad es. 10 o 100 righe) verso l'alto dalla parte superiore della finestra corrente.
Se un costrutto sintattico, ad esempio un tag HTML di apertura o una definizione di funzione ecc. Inizia più in alto rispetto al punto in cui vim inizia l'analisi, la sintassi di vims regex si interrompe.
Di solito per risolvere questo problema, aumenta il punto in cui vim inizia ad analizzare.
Per scoprire quante righe sopra la riga superiore del viewim vim sta iniziando il suo analisi, usare:
:syntax sync
Ecco il mio output durante la visualizzazione di un file HTML:
:syntax sync
--- Syntax sync items ---
syncing on items; minimal 10, maximal 100 lines before top line
[lots of other output here...]
se avessi un problema con la sincronizzazione - solo per quel file - aumenterei le minline con
:syntax sync minlines=200
Se riscontri ripetutamente questo problema, è più difficile. Questo perché il valore di sincronizzazione è spesso impostato in un file di sintassi dedicato al tipo di file che si sta modificando, ad es. Per me syntax sync minlines
per i tipi di file html è impostato nel file di sintassi
/usr/share/vim/vim74/syntax/html.vim
l'analisi della sintassi e i valori di configurazione per i file CSS sono presenti
/usr/share/vim/vim74/syntax/css.vim
shell è dentro sh.vim
e così via.
Questi script sintassi eseguiti solo al momento si apre un file del tipo foo.css
, bar.html
, baz.sh
ecc, in modo da impostare una linea nel vostro vimrc non funzionerà perché questi script potrebbero soffiare le impostazioni di distanza, una soluzione è quella di utilizzare un autocmd che si innesca quando inserisci il file
autocmd BufEnter *.html :syntax sync minlines=200