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.php
con 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 JAVASCRIPT
bloque está resaltado correctamente, pero el CSS
bloque no. Además, si ejecuto SynStack
la var
palabra 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-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.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
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:
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
@htmlJavascript
sintaxiscluster
2 dentro delcontains
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 eljavascript
acss
:¡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: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
@htmlJavascript
con@htmlCss
en elcontains
argumento:¿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!1: Ver
:help :syn-contains
para más detalles.2: ver
:help :syn-cluster
.3: me he
'ignorecase'
encendido. Sin él, deberá buscarhtmlJavascript
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?fuente