TL; DR:
É definido nos arquivos de sintaxe PHP e HTML do Vim. Para ver como adicionar regras para CSS, vá para a seção E como adiciono a elas? abaixo ou continue lendo para obter uma explicação de como funciona.
Onde essas regras de sintaxe estão sendo definidas?
O heredoc JavaScript é destacado usando o recurso de sintaxe contains
1 do Vim , que permite que grupos de sintaxe contenham outros grupos de sintaxe.
Para descobrir onde isso está definido, primeiro abra o arquivo de destaque de sintaxe para PHP:
:e $VIMRUNTIME/syntax/php.vim
Agora, presumivelmente, o arquivo de sintaxe está localizando o heredoc do JavaScript com base em uma correspondência da string "javascript", então vamos tentar procurar por isso:
/javascript
A terceira partida é este comentário:
" including HTML,JavaScript,SQL even if not enabled via options
Parece promissor! Vamos dar uma olhada na linha de sintaxe relevante:
syn region phpHereDoc matchgroup=Delimiter
\ start="\(<<<\)\@<=\(\"\=\)\z(\(\I\i*\)\=\(javascript\)\c\(\i*\)\)\2$"
\ end="^\z1\(;\=$\)\@="
\ contained
\ contains=@htmlJavascript,phpIdentifierSimply,phpIdentifier,phpIdentifierComplex,phpBackslashSequences,phpMethodsVar,@Spell
\ keepend extend
( continuações de linha adicionadas para facilitar a leitura )
Ok, essa região de sintaxe localiza o heredoc do JavaScript com uma expressão regular complicada e permite o realce do JavaScript na região, incluindo a @htmlJavascript
sintaxe cluster
2 no contains
argumento.
Mas não existe uma definição correspondente para heredocs CSS! Vamos adicionar um. Portanto, a primeira coisa a mudar é a start
expressão regular. Simplesmente mude javascript
para css
:
start="\(<<<\)\@<=\(\"\=\)\z(\(\I\i*\)\=\(css\)\c\(\i*\)\)\2$"
Isso é facil!
Mas não queremos destacar o JavaScript em nosso CSS heredoc. Então, também precisamos alterar o @htmlJavascript
para o equivalente em CSS. Mas qual é o equivalente em CSS? (Você pode adivinhar, mas vamos fazer os movimentos para ter certeza.)
Vamos procurar htmljavascript
3 para ver onde está definido:
/htmljavascript
Hummm. Nenhum outro resultado. Deve ser definido em outro lugar! Vamos dar uma rápida olhada na parte superior do arquivo para ver se podemos encontrar algum inclui:
runtime! syntax/html.vim
Parece que pode ser isso 4 .
:e $VIMRUNTIME/syntax/html.vim
Execute a pesquisa novamente neste arquivo e encontramos a linha 5 :
syn cluster htmlJavaScript add=@htmlPreproc
Então htmlJavaScript é um cluster
, definido em html.vim
. Existe um cluster semelhante para CSS que podemos usar?
/htmlcss
Sim!
syn include @htmlCss syntax/css.vim
Então, só precisamos substituir @htmlJavascript
por @htmlCss
no contains
argumento:
contains=@htmlCss,phpIdentifierSimply,phpIdentifier,[...]
E como eu adiciono a eles?
Salve o comando de sintaxe inteiro abaixo no arquivo ~/after/syntax/php.vim
para que ele seja executado após o restante do processamento da sintaxe do PHP ser executado, e pronto!
syn region phpHereDoc matchgroup=Delimiter
\ start="\(<<<\)\@<=\(\"\=\)\z(\(\I\i*\)\=\(css\)\c\(\i*\)\)\2$"
\ end="^\z1\(;\=$\)\@="
\ contained
\ contains=@htmlCss,phpIdentifierSimply,phpIdentifier,phpIdentifierComplex,phpBackslashSequences,phpMethodsVar,@Spell
\ keepend extend
1: Veja :help :syn-contains
para detalhes.
2: Veja :help :syn-cluster
.
3: Liguei 'ignorecase'
. Sem ele, você precisará procurar htmlJavascript
ou \chtmljavascript
4: De fato, com base no esquema de nomenclatura usado nos arquivos de sintaxe do Vim, provavelmente poderíamos ter descoberto isso com base apenas no htmlJavascript
nome.
5: Com "JavaScript" maiúsculo de forma diferente, desta vez. Sorte que ligamos 'ignorecase'
, não é?
// This should be syntax-highlighted
não é um comentário CSS válido e, portanto, deve ser destacada a sintaxe como algo diferente de um comentário. O CSS suporta apenas/* */
comentários de várias linhas.//
comentários de linha única são suportados apenas se você usar idiomas de pré-processador, como Sass ou Stylus.