Как настроить emacs для редактирования файлов HTML, содержащих Javascript?

Я начал мучительные первые шаги использования emacs для редактирования HTML файла с использованием как HTML-тегов, так и содержимого javascript. Я установил nxhtml и попытался использовать его - i.e настроил для использования nxhtml-mumamo-mode для .html файлов. Но я не люблю это. Когда я редактирую часть Javascript кода, вкладки вкладки не ведут себя так же, как при редактировании кода C/С++. Он начинает помещать вкладки внутри строки, и если вы попытаетесь нажать вкладку в белом пробеле перед строкой, она вставляет вкладку, а не перетаскивает строку.

Другим аспектом, который мне не нравится, является то, что он не выполняет синтаксическую раскраску, как это делают обычные режимы C/С++. Я предпочитаю поведение java-режима по умолчанию при редактировании HTML файлов, но это не очень хорошо сочетается с кодом HTML.: - (

1) Есть ли лучший режим для редактирования файлов HTML с частями Javascript?

2) Есть ли способ заставить nxhtml использовать java-режим по умолчанию для частей javascript?

Привет,

M

Ответ 1

Другим решением является multi-web-mode:

https://github.com/fgallina/multi-web-mode

который может быть легче конфигурироваться, чем уже упомянутый multi-mode.

Просто настройте предпочтительные режимы в файле .emacs следующим образом:

(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)

Подробнее о Emacs несколько множественных режимов (вздох) здесь:

http://www.emacswiki.org/emacs/MultipleModes

UPDATE: упростить регулярные выражения для обнаружения областей JavaScript или CSS, чтобы заставить их работать с HTML5 - нет необходимости в сверхточных и хрупких регулярных выражениях.

Ответ 2

Я написал основной режим web-mode.el для такого использования: редактирование HTML-шаблонов, встраивающих JS, CSS, Java (JSP), PHP. Вы можете скачать его на http://web-mode.org Web-mode.el делает подсветку синтаксиса и отступ в соответствии с типом блока. Установка проста:

(require 'web-mode)
(add-to-list 'auto-mode-alist '("\\.html$" . web-mode))

Ответ 3

Отличный вопрос. Посмотрите, сколько у вас осталось на первом!

Каждый человек имеет тот же опыт, что и вы. Я тоже.

Вместо того, чтобы полагаться на nhtml-режим, который показал мне такую ​​же странность, как вы описали, я искал еще один вариант и нашел multi-mode.el. Это своего рода универсальный многомодовый скелет. Чтобы использовать его, вам нужно указать регулярные выражения для описания того, где запускается один режим, а другой заканчивается. Итак, вы ищете <script...>, чтобы запустить блок javascript, и <style...>, чтобы запустить блок css. Затем вы подключаете свои собственные режимы для каждого блока - если вам нравится эспрессо для javascript, используйте его. И так далее для других регулярных выражений, которые идентифицируют другие блоки.

На практике, когда вы перемещаетесь по документу, для каждого блока активируется другой режим.

Я использовал мультирежим для создания ASP.NET, который позволяет мне редактировать С#, HTML, CSS и Javascript в одном файле с правильной подсветкой и расширением в зависимости от того, где находится курсор в буфере. Это не идеально, но я нашел, что это значительное улучшение существующих возможностей. На самом деле это может быть то, что вы хотите. Попробуйте.

https://code.google.com/p/csharpmode/source/browse/trunk/aspx-mode.el?r=14

Ответ 4

Не очень хорошее решение, но быстрое исправление, если вам действительно нужно, чтобы javascript в вашем html должен был выбрать область, содержащую javascript, и использовать команду narrow-to-region (C-x n n), а затем переключиться на предпочтительный режим javascript. Команда widen возвращает вас назад (C-x n w).

Ответ 5

Похоже, что вы неправильно настроили свой nxhtml. Единственной необходимой настройкой должна быть загрузка файла autostart.el, и тогда все должно работать на некотором уровне. nxhtml не идеален, но мой опыт использования его для html/css/javascript/mako довольно хорош, по крайней мере, для всего, кроме мако. Но я почти уверен, что я испортил мако-часть.

Вот как я инициализирую свой 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))