Isso pode ser um problema no sistema do vim para reconhecer e destacar as "palavras-chave" sintáticas, não tendo contexto suficiente para reconhecer as palavras-chave.
Os conceitos básicos do sistema de sintaxe do vim (localizando e identificando elementos básicos de sintaxe) são explicados em :h usr_44
Basicamente, o vim usa o regex para reconhecer elementos sintáticos em um arquivo, uma vez identificados, e as regras de destaque são aplicadas para colorir essas construções de código (ou seja, para fazer o "realce da sintaxe"), mas, conforme explicado no :h 44.10
vim, não começa a analisar a partir do arquivo. No início do arquivo, ele inicia um número de linhas (por exemplo, 10 ou 100 linhas) para cima a partir do topo da sua janela atual.
Se uma construção sintática, por exemplo, uma tag HTML de abertura ou uma definição de função, etc, for iniciada mais alto do que o ponto em que o vim começa a analisar, a sintaxe do vims será interrompida.
Normalmente, para corrigir isso, você aumenta o ponto em que o vim começa a analisar.
Para descobrir quantas linhas acima da linha superior do viewport vim estão iniciando seu uso de análise:
:syntax sync
Aqui está minha saída ao visualizar um arquivo HTML:
:syntax sync
--- Syntax sync items ---
syncing on items; minimal 10, maximal 100 lines before top line
[lots of other output here...]
se eu tivesse um problema com a sincronização - apenas para esse arquivo - aumentaria as minlines com
:syntax sync minlines=200
Se você repetidamente resolver esse problema, será um pouco mais difícil. Isso ocorre porque o valor da sincronização geralmente é definido em um arquivo de sintaxe dedicado ao tipo de arquivo que você está editando, por exemplo, para mim, os syntax sync minlines
tipos de arquivo html são definidos no arquivo de sintaxe.
/usr/share/vim/vim74/syntax/html.vim
análise de sintaxe e valores de configuração para arquivos css
/usr/share/vim/vim74/syntax/css.vim
shell está dentro sh.vim
e assim por diante.
Esses scripts de sintaxe só correr no momento em que você abre um arquivo do tipo foo.css
, bar.html
, baz.sh
etc, assim, definir uma linha em seu vimrc não vai funcionar porque esses scripts iria explodir suas configurações de distância, uma solução é usar um autocmd que desencadeia quando você insira o arquivo
autocmd BufEnter *.html :syntax sync minlines=200