Cuando edito un archivo PHP y defino una cadena en un heredoc, el resaltado de sintaxis se habilitará dentro del heredoc si es sintaxis JavaScript o sintaxis HTML o sintaxis SQL. Sin embargo, no funcionará para la sintaxis CSS.
Ejemplo (si creamos un nuevo archivo PHP llamado hello.phpcon el siguiente código):
<?php
$foo = <<<"JAVASCRIPT"
var hello = "hello";
JAVASCRIPT;
$bar = <<<"CSS"
/* This code below should be syntax-highlighted. */
.hello {
font-weight: bold;
}
CSS;
El JAVASCRIPTbloque está resaltado correctamente, pero el CSSbloque no. Además, si ejecuto SynStackla varpalabra clave en el bloque de código JavaScript, obtengo ['phpRegion', 'phpHereDoc', 'javaScriptIdentifier'], pero si hago lo mismo en cualquier lugar del bloque CSS, solo obtengo ['phpRegion', 'phpHereDoc'], así que necesito agregar algunas reglas de resaltado de sintaxis CSS. ¿Dónde se definen estas reglas de sintaxis y cómo las agrego?
fuente

// 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.Respuestas:
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:
Ahora, presumiblemente el archivo de sintaxis está encontrando el JavaScript heredoc basado en una coincidencia de la cadena "javascript", así que intentemos buscar eso:
El tercer partido es este comentario:
¡Parece prometedor! Echemos un vistazo a la línea de sintaxis relevante:
( 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
@htmlJavascriptsintaxiscluster2 dentro delcontainsargumento.¡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 eljavascriptacss:¡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: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:
Parece que podría ser 4 .
Ejecute la búsqueda nuevamente en este archivo, y encontramos esta línea 5 :
Entonces htmlJavaScript es un
cluster, definido enhtml.vim. ¿Hay un clúster similar para CSS que podamos usar?¡Sip!
Entonces solo necesitamos reemplazar
@htmlJavascriptcon@htmlCssen elcontainsargumento:¿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!1: Ver
:help :syn-containspara más detalles.2: ver
:help :syn-cluster.3: me he
'ignorecase'encendido. Sin él, deberá buscarhtmlJavascripto\chtmljavascript4: 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?fuente