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 contains
1 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 @htmlJavascript
sintaxis cluster
2 dentro del contains
argumento.
¡Pero no hay una definición correspondiente para CSS heredocs! Vamos a agregar uno. Entonces, lo primero que debe cambiar es la start
expresión regular. Simplemente cambie el javascript
a 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 @htmlJavascript
equivalente a CSS. Pero, ¿cuál es el equivalente de CSS? (Es posible que pueda adivinar, pero veamos los movimientos para estar seguros).
Busquemos htmljavascript
3 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 @htmlJavascript
con @htmlCss
en el contains
argumento:
contains=@htmlCss,phpIdentifierSimply,phpIdentifier,[...]
¿Y cómo los agrego?
Guarde todo el comando de sintaxis a continuación en el archivo ~/after/syntax/php.vim
para 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-contains
para más detalles.
2: ver :help :syn-cluster
.
3: me he 'ignorecase'
encendido. Sin él, deberá buscar htmlJavascript
o \chtmljavascript
4: de hecho, según el esquema de nomenclatura utilizado en los archivos de sintaxis de Vim, probablemente podríamos haberlo resuelto htmlJavascript
solo con el nombre.
5: Con "JavaScript" capitalizado de manera diferente, esta vez. Suerte que nos hemos 'ignorecase'
encendido, ¿eh?
// This should be syntax-highlighted
no 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.