Как настроить 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))