En vim, el siguiente documento hará que las $PWD
líneas 2 y 3 se coloreen de dos maneras diferentes:
#/bin/sh
echo "Current Directory: $PWD"
echo 'Current Directory: $PWD'
La primera instancia de $PWD
estará en un color diferente del resto de la cadena en la que se encuentra. Esto proporciona una indicación visual clara de que la variable se expandirá, en lugar de tratarse como texto literal. Por el contrario, la segunda instancia de $PWD
tendrá el mismo color que el resto de la cadena, porque las comillas simples hacen que se trate como texto literal.
¿Existen modos emacs existentes que proporcionen este tipo de "conciencia de citación de shell"?
sh-mode
? Tal vez se pueda agregar a Emacs.Respuestas:
El siguiente código utiliza una regla de bloqueo de fuente con una función en lugar de una expresión regular, la función busca ocurrencias de,
$VAR
pero solo cuando están dentro de una cadena entre comillas dobles. La función(syntax-ppss)
se usa para determinar esto.La regla de bloqueo de fuente usa la
prepend
bandera para agregarse encima del resaltado de cadena existente. (Tenga en cuenta que muchos paquetes se usant
para esto. Desafortunadamente, esto sobrescribe todos los aspectos del resaltado existente. Por ejemplo, el usoprepend
retendrá un color de fondo de cadena (si lo hay) mientras reemplaza el color de primer plano).Puede llamar a usar esto agregando la última función a un enlace adecuado, por ejemplo:
fuente
2
regla en el bloqueo de fuente con una0
, debería funcionar. (Es posible que deba extender la expresión regular para incluir un final}
para resaltar${FOO}
correctamente). Este número se refiere al subgrupo de expresiones regulares de la coincidencia,0
lo que significa que toda la coincidencia debe resaltarse.Mejoré la respuesta de @ Lindydancer de las siguientes maneras:
sh-script-extra-font-lock-is-in-double-quoted-string
función, ya que solo se usó una vez$10
,$1
, etc) se resaltan.Romper para el código
fuente
[^\\\\]
podría escribirse como[^\\]
, es un conjunto de caracteres que no deben coincidir, y su código incluye la barra invertida dos veces. En versiones anteriores de Emacs se debe usarfont-lock-fontify-buffer
, en las nuevas se supone que debe llamarfont-lock-flush
y las llamadasfont-lock-fontify-buffer
desde elisp están en desuso. Mi código original siguió esto, su código no. De todos modos, podría ser una mejor idea migrar esto a un archivo GitHub y unirse al esfuerzo.[^\\]
escapa del]
? Así es como funciona la expresión regular en Java, como sé.