Як налаштувати emacs для редагування HTML-файлів, що містять Javascript?


94

Я розпочав болісні перші кроки використання emacs для редагування HTML-файлу як з тегами HTML, так і з вмістом javascript. Я встановив nxhtml і спробував використовувати його - тобто налаштував використовувати nxhtml-mumamo-mode для .html файлів. Але я не люблю цього. Коли я редагую частину коду Javascript, відступи табуляції поводяться не так, як при редагуванні коду C / C ++. Він починає розміщувати вкладки в рядку, і якщо ви спробуєте натиснути вкладку в пробілі, що передує рядку, він вставляє вкладку, а не повторно табілізує рядок.

Ще один аспект, який мені не подобається, - це те, що він не забарвлює синтаксис, як це робить звичайний режим C / C ++. Мені більше подобається поведінка режиму Java за замовчуванням під час редагування HTML-файлів, але це не дуже добре поєднується з HTML-кодом. :-(

1) Чи є кращий режим для редагування файлів HTML з частинами Javascript?

2) Чи є спосіб отримати nxhtml, щоб використовувати java-режим за замовчуванням для частин javascript?

З повагою,

М


Я використовую MMM-режим, який теоретично це робить, але це якось гарно, я насправді не такий задоволений. Я вставив у свій конфігуратор багато прислух з emacswiki, але насправді не витрачав на це тижні. Я хотів би, щоб це було простіше для тих з нас, хто більше цікавиться використанням emacs, аніж конфігурацією.
Натан,

1
Я думаю, що обхідний шлях - це створення двох файлів та посилання на файл javascript із <script src>. Ви можете переглядати їх як з трохи, так C-x 2і C-x 3і мати режим для кожного. : - /
Патрік

Відповіді:


41

Іншим рішенням є 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 - немає необхідності в надточних та тендітних регулярних виразах.


У мене були проблеми, поєднуючи це з мухомором
juanmirocks

для обробки більшої кількості справ, таких як html5, я зараз використовую простіші та простіші описи тегів для JavaScript та CSS:(js-mode "<script[^>]*>" "</script>") (css-mode "<style[^>]*>" "</style>")
Кай Карвер

32

Я написав основний режим 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))

1
веб-режим також доступний у пакеті. Принаймні від MELPA.
mcginniwa

Має підтримку двигуна відтворення / бритви!
juanmirocks

Привіт fxbois, чому це не працює для мене? Я скопіював web-mode.el у / use / local / share / emacs / site-lisp / (і видалив усі інші .el-файли), і перейшов до розділу "Встановити" на web-mode.org (і лише файл .emacs має ці кілька рядків). Чи можете ви допомогти? Дякую.
Тоні Сю

1
Чи можете ви завантажити файл we-mode.el всередині emacs та після веб-режиму Mx
fxbois

14

Чудове запитання. Подивіться, скільки голосів ви отримали за свій перший!

Кожен має такий самий досвід, як і ви. Я також.

Замість того, щоб покладатися на 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


Я щойно випробував режим aspx. Це працювало чудово. Єдине, що я зробив, це змінив підтримку javascript з режиму expresso на javascript-mode.
MakeDummy

7

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


0

Схоже, ви неправильно налаштували 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))
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.