Quando edito um arquivo PHP e defino uma cadeia de caracteres em um heredoc, o destaque da sintaxe será ativado dentro do heredoc, se for a sintaxe JavaScript ou HTML ou SQL. No entanto, não funcionará para a sintaxe CSS.
Exemplo (se criarmos um novo arquivo PHP chamado hello.php
com o seguinte código):
<?php
$foo = <<<"JAVASCRIPT"
var hello = "hello";
JAVASCRIPT;
$bar = <<<"CSS"
/* This code below should be syntax-highlighted. */
.hello {
font-weight: bold;
}
CSS;
O JAVASCRIPT
bloco está destacado corretamente, mas o CSS
bloco não está. Além disso, se eu executar SynStack
a var
palavra-chave no bloco de código JavaScript, recebo ['phpRegion', 'phpHereDoc', 'javaScriptIdentifier']
, mas se fizer o mesmo em qualquer lugar no bloco CSS, só o receberei ['phpRegion', 'phpHereDoc']
, então preciso adicionar algumas regras de destaque da sintaxe CSS. Onde essas regras de sintaxe estão sendo definidas e como as adiciono?
fonte
// 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.Respostas:
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:
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:
A terceira partida é este comentário:
Parece promissor! Vamos dar uma olhada na linha de sintaxe relevante:
( 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
sintaxecluster
2 nocontains
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 mudejavascript
paracss
: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: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:
Parece que pode ser isso 4 .
Execute a pesquisa novamente neste arquivo e encontramos a linha 5 :
Então htmlJavaScript é um
cluster
, definido emhtml.vim
. Existe um cluster semelhante para CSS que podemos usar?Sim!
Então, só precisamos substituir
@htmlJavascript
por@htmlCss
nocontains
argumento: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!1: Veja
:help :syn-contains
para detalhes.2: Veja
:help :syn-cluster
.3: Liguei
'ignorecase'
. Sem ele, você precisará procurarhtmlJavascript
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 é?fonte