TL; DR:
Está definido en los archivos de sintaxis PHP y HTML de Vim. Para ver cómo agregar reglas para CSS, vaya a la sección ¿Y cómo las agrego? a continuación, o siga leyendo para obtener una explicación de cómo funciona.
¿Dónde se definen estas reglas de sintaxis?
El JavaScript heredoc se resalta con la función de sintaxis contains1 de Vim , que permite que los grupos de sintaxis contengan otros grupos de sintaxis.
Para encontrar dónde se define esto, primero abra el archivo de resaltado de sintaxis para PHP:
:e $VIMRUNTIME/syntax/php.vim
Ahora, presumiblemente el archivo de sintaxis está encontrando el JavaScript heredoc basado en una coincidencia de la cadena "javascript", así que intentemos buscar eso:
/javascript
El tercer partido es este comentario:
" including HTML,JavaScript,SQL even if not enabled via options
¡Parece prometedor! Echemos un vistazo a la línea de sintaxis 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
( continuaciones de línea agregadas para facilitar la lectura )
Bien, entonces esta región de sintaxis encuentra el JavaScript heredoc con una expresión regular enrevesada, y permite resaltar JavaScript dentro de la región al incluir la @htmlJavascriptsintaxis cluster2 dentro del containsargumento.
¡Pero no hay una definición correspondiente para CSS heredocs! Vamos a agregar uno. Entonces, lo primero que debe cambiar es la startexpresión regular. Simplemente cambie el javascripta css:
start="\(<<<\)\@<=\(\"\=\)\z(\(\I\i*\)\=\(css\)\c\(\i*\)\)\2$"
¡Esto es facil!
Pero no queremos resaltar JavaScript en nuestro CSS heredoc. Por lo tanto, también debemos cambiar el @htmlJavascriptequivalente a CSS. Pero, ¿cuál es el equivalente de CSS? (Es posible que pueda adivinar, pero veamos los movimientos para estar seguros).
Busquemos htmljavascript3 para ver dónde está definido:
/htmljavascript
Hmmm No hay otros resultados. ¡Debe definirse en otra parte! Echemos un vistazo rápido a la parte superior del archivo para ver si podemos encontrar alguna que incluya:
runtime! syntax/html.vim
Parece que podría ser 4 .
:e $VIMRUNTIME/syntax/html.vim
Ejecute la búsqueda nuevamente en este archivo, y encontramos esta línea 5 :
syn cluster htmlJavaScript add=@htmlPreproc
Entonces htmlJavaScript es un cluster, definido en html.vim. ¿Hay un clúster similar para CSS que podamos usar?
/htmlcss
¡Sip!
syn include @htmlCss syntax/css.vim
Entonces solo necesitamos reemplazar @htmlJavascriptcon @htmlCssen el containsargumento:
contains=@htmlCss,phpIdentifierSimply,phpIdentifier,[...]
¿Y cómo los agrego?
Guarde todo el comando de sintaxis a continuación en el archivo ~/after/syntax/php.vimpara que se ejecute después de que se haya llevado a cabo el resto del procesamiento de sintaxis de PHP, ¡y listo!
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: Ver :help :syn-containspara más detalles.
2: ver :help :syn-cluster.
3: me he 'ignorecase'encendido. Sin él, deberá buscar htmlJavascripto \chtmljavascript
4: de hecho, según el esquema de nomenclatura utilizado en los archivos de sintaxis de Vim, probablemente podríamos haberlo resuelto htmlJavascriptsolo con el nombre.
5: Con "JavaScript" capitalizado de manera diferente, esta vez. Suerte que nos hemos 'ignorecase'encendido, ¿eh?
// This should be syntax-highlightedno es un comentario CSS válido, por lo que debe resaltarse la sintaxis como algo más que un comentario. CSS solo admite/* */comentarios de varias líneas.//Los comentarios de una sola línea solo son compatibles si utiliza lenguajes de preprocesador como Sass o Stylus.