A coloração da sintaxe é imprecisa para arquivos HTML com código CSS

Sep 25 2020

Como você pode ver no screencast a seguir, quando eu abro um arquivo HTML com algum CSS nele, há alguma parte do arquivo que não mostra coloração de sintaxe. Você tem experiência nisso? É normal quando se tem vários idiomas em um arquivo como neste caso?

Respostas

5 JakeGrossman Sep 25 2020 at 01:47

Às vezes, o Vim pode perder o controle de onde está destacando, especialmente em cenários complexos (linguagens aninhadas, neste exemplo).

Você pode dizer ao Vim onde ele deve sincronizar o realce de sintaxe usando o :syn synccomando. De :h :syn-sync:

Existem quatro maneiras de sincronizar:

  1. Sempre analise desde o início do arquivo.
  2. Com base em comentários de estilo C. O Vim entende como os comentários C funcionam e pode descobrir se a linha atual começa dentro ou fora de um comentário.
  3. Pule para trás um certo número de linhas e comece a analisar lá.
  4. Pesquisando para trás no texto por um padrão para sincronizar.

Como não sabemos quanto tempo o <style>bloco terá e não estamos usando comentários no estilo C, isso nos deixa com duas soluções (1 e 4).

A Solução 1 é a mais fácil das duas, exigindo uma única linha em ~/.vim/after/syntax/html.vim:

syntax sync fromstart

Isso dirá ao Vim para sempre sincronizar desde o início do arquivo. Isso pode ser lento para arquivos longos. No entanto, o Vim armazenará em cache o texto analisado anteriormente, de forma que ele só precise analisar o arquivo novamente quando e onde for necessário.