Как мне настроить emacs для редактирования файлов HTML, которые содержат Javascript? - PullRequest
91 голосов
/ 16 декабря 2010

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

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

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

С уважением,

М

Ответы [ 5 ]

40 голосов
/ 11 августа 2012

Другое решение - 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

ОБНОВЛЕНИЕ: упрощено регулярное выражениеобнаруживать области JavaScript или CSS, чтобы заставить их работать с HTML5 - нет необходимости в сверхточных и хрупких регулярных выражениях.

31 голосов
/ 06 сентября 2012

Я написал основной режим 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))
13 голосов
/ 17 декабря 2010

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

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

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

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

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

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

6 голосов
/ 17 декабря 2010

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

0 голосов
/ 26 декабря 2010

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