¿Cómo configuro emacs para editar archivos HTML que contienen Javascript?
lisp (5)
Comencé los dolorosos primeros pasos de usar emacs para editar un archivo HTML con etiquetas HTML y contenido de JavaScript. He instalado nxhtml y he intentado usarlo, es decir, configurado para usar nxhtml-mumamo-mode para archivos .html. Pero no lo estoy amando Cuando estoy editando la parte de JavaScript del código, las sangrías de las pestañas no se comportan como lo hacen cuando editan el código C / C ++. Comienza a colocar pestañas dentro de la línea y si intenta presionar la pestaña en el espacio en blanco que precede a una línea, inserta la pestaña en lugar de volver a tabular la línea.
Otro aspecto que no me gusta es que no tiene colorante de sintaxis como los modos habituales de C / C ++. Prefiero el comportamiento del modo java predeterminado al editar archivos HTML, pero eso no funciona muy bien con el código HTML. :-(
1) ¿Hay un modo mejor para editar archivos HTML con porciones de JavaScript?
2) ¿Hay alguna manera de hacer que nxhtml use el modo java predeterminado para las porciones de javascript?
Saludos,
METRO
Gran pregunta ¡Mira cuántos votaciones ascendentes tienes en tu primera!
Todos tienen la misma experiencia que tú. Yo también.
En lugar de confiar en el modo nhtml, que me mostró el mismo tipo de rareza que usted describió, busqué otra opción y encontré multi-mode.el . Es una especie de esqueleto multimodo de propósito general. Para usarlo, debe especificar expresiones regulares para describir dónde comienza un modo y termina otro. Entonces, busca <script...>
para iniciar un bloque de javascript, y <style...>
para iniciar un bloque de css. Luego, conecta sus propios modos para cada bloque. Si le gusta espresso para javascript, úselo. Y así sucesivamente para las otras expresiones regulares que identifican otros bloques.
En la práctica, mientras navega por el documento, se habilita un modo diferente para cada bloque.
Usé multimodo para producir ASP.NET, que me permite editar C #, HTML, CSS y Javascript en un solo archivo, con el resaltado y la fuente de datos adecuados, dependiendo de dónde esté el cursor en el búfer. No es perfecto, pero creo que es una mejora notable en las posibilidades existentes. De hecho, esto puede ser lo que quieres. Pruébalo.
https://code.google.com/p/csharpmode/source/browse/trunk/aspx-mode.el?r=14
He escrito el modo principal web-mode.el para este tipo de uso: edición de plantillas HTML que incorporan JS, CSS, Java (JSP), PHP. Puede descargarlo en http://web-mode.org Web-mode.el resalta la sintaxis y la sangría de acuerdo con el tipo del bloque. La instalación es simple:
(require ''web-mode)
(add-to-list ''auto-mode-alist ''("//.html$" . web-mode))
No es realmente una buena solución, pero una solución rápida si realmente necesita tener javascript en su html es seleccionar la región que contiene javascript y usar el comando narrow-to-region
( Cx nn
) y luego cambiar a su modo javascript preferido. El comando widen
trae de vuelta, ( Cx nw
).
Otra solución es el modo multi-web-mode
:
https://github.com/fgallina/multi-web-mode
que puede ser más fácilmente configurable que el multi-mode
ya mencionado.
Simplemente configura tus modos preferidos en tu archivo .emacs
como este:
(require ''multi-web-mode)
(setq mweb-default-major-mode ''html-mode)
(setq mweb-tags
''((php-mode "<//?php//|<//? //|<//?=" "//?>")
(js-mode "<script[^>]*>" "</script>")
(css-mode "<style[^>]*>" "</style>")))
(setq mweb-filename-extensions ''("php" "htm" "html" "ctp" "phtml" "php4" "php5"))
(multi-web-global-mode 1)
Más sobre los múltiples modos múltiples de Emacs (suspiro) aquí:
http://www.emacswiki.org/emacs/MultipleModes
ACTUALIZACIÓN: simplificó las expresiones regulares para detectar áreas JavaScript o CSS para que funcionen con HTML5, sin necesidad de expresiones regulares súper precisas y frágiles.
Parece que has configurado tu nxhtml incorrectamente. La única configuración necesaria debe ser cargar el archivo autostart.el
, y entonces todo debería funcionar a algún nivel. nxhtml no es perfecto de ninguna manera, pero mis experiencias al usarlo para html / css / javascript / mako son bastante buenas, al menos para todo menos para mako. Pero estoy bastante seguro de haber arruinado la parte de mako.
Así es como inicializo mi nxhtml:
(when (load "autostart.el" t)
(setq nxhtml-skip-welcome t
mumamo-chunk-coloring ''submode-colored
indent-region-mode t
rng-nxml-auto-validate-flag nil))