Làm cách nào để định cấu hình emacs để chỉnh sửa các tệp HTML có chứa Javascript?


94

Tôi đã bắt đầu những bước đầu tiên khó khăn khi sử dụng emacs để chỉnh sửa tệp HTML có cả thẻ HTML và nội dung javascript. Tôi đã cài đặt nxhtml và thử sử dụng nó - tức là thiết lập để sử dụng nxhtml-mumamo-mode cho các tệp .html. Nhưng tôi không yêu nó. Khi tôi đang chỉnh sửa phần Javascript của mã, thụt lề tab không hoạt động như khi chỉnh sửa mã C / C ++. Nó bắt đầu đặt các tab trong dòng và nếu bạn thử nhấn tab trong khoảng trắng trước dòng, nó sẽ chèn tab chứ không phải gắn thẻ lại dòng.

Một khía cạnh khác mà tôi không thích là nó không tô màu cú pháp như các chế độ C / C ++ thông thường làm. Tôi rất thích hoạt động của chế độ java mặc định khi chỉnh sửa tệp HTML nhưng điều đó không phù hợp với mã HTML. :-(

1) Có chế độ nào tốt hơn để chỉnh sửa tệp HTML với các phần Javascript không?

2) Có cách nào để lấy nxhtml sử dụng chế độ java mặc định cho các phần javascript không?

Trân trọng,

M


Tôi sử dụng chế độ MMM, về lý thuyết thì làm được điều này nhưng nó hơi tệ, tôi không thực sự hài lòng với nó. Tôi đã dán rất nhiều lisp vào cấu hình của mình từ emacswiki nhưng không thực sự dành nhiều tuần cho nó. Tôi ước nó đơn giản hơn cho những người trong chúng ta quan tâm đến việc sử dụng emac hơn là cấu hình nó.
Nathan

1
Tôi đoán một cách giải quyết là tạo hai tệp và tham chiếu tệp javascript với a <script src>. Bạn có thể xem cả hai với một chút C-x 2hoặc C-x 3và có một chế độ cho mỗi cái. : - /
Patrick

Câu trả lời:


41

Một giải pháp khác là multi-web-mode:

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

có thể dễ dàng cấu hình hơn những thứ đã được đề cập multi-mode.

Bạn chỉ cần định cấu hình các chế độ ưa thích trong .emacstệp của mình như sau:

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

Thông tin thêm về nhiều chế độ của Emacs (thở dài) tại đây:

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

CẬP NHẬT: đơn giản hóa các regexps để phát hiện các vùng JavaScript hoặc CSS để làm cho chúng hoạt động với HTML5 - không cần các biểu thức chính quy siêu chính xác và mỏng manh.


Tôi đã gặp rắc rối kết hợp nó với flymake
juanmirocks

để xử lý nhiều trường hợp, như html5, bây giờ tôi sử dụng giới thiệu thẻ đơn giản hơn và tha thứ hơn cho JavaScript và CSS:(js-mode "<script[^>]*>" "</script>") (css-mode "<style[^>]*>" "</style>")
Kai Carver

32

Tôi đã viết chế độ chính web-mode.el cho kiểu sử dụng này: chỉnh sửa các mẫu HTML nhúng JS, CSS, Java (JSP), PHP. Bạn có thể tải xuống trên http://web-mode.org Web-mode.el đánh dấu cú pháp và thụt lề tùy theo loại khối. Cài đặt rất đơn giản:

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

1
chế độ web cũng có sẵn dưới dạng một gói. Ít nhất là từ MELPA.
mcginniwa

Có hỗ trợ động cơ chơi / dao cạo!
juanmirocks

Xin chào fxbois, tại sao điều này không hiệu quả với tôi? Tôi đã sao chép web-mode.el vào / use / local / share / emacs / site-lisp / (và xóa tất cả các tệp .el khác) và làm theo phần "Cài đặt" tại web-mode.org (và chỉ tệp .emacs có vài dòng). Bạn có thể vui lòng giúp đỡ? Cảm ơn.
Tony Xu

1
Bạn có thể tải file file chúng ta-mode.el bên trong emacs và sau Mx web-mode
fxbois

14

Câu hỏi tuyệt vời. Hãy nhìn xem bạn đã nhận được bao nhiêu phiếu ủng hộ cho lần đầu tiên của mình!

Mọi người đều có kinh nghiệm giống bạn. Tôi cũng vậy.

Thay vì dựa vào nhtml-mode thể hiện sự kỳ lạ đối với tôi như bạn mô tả, tôi đã tìm kiếm một tùy chọn khác và tìm thấy multi-mode.el . Đó là một loại khung đa chế độ có mục đích chung. Để sử dụng nó, bạn cần chỉ định biểu thức chính quy để mô tả nơi một chế độ bắt đầu và một chế độ khác kết thúc. Vì vậy, bạn tìm <script...>cách bắt đầu một khối javascript và <style...>để bắt đầu một khối css. Sau đó, bạn cài đặt các chế độ của riêng mình cho mỗi khối - nếu bạn thích espresso cho javascript, hãy sử dụng nó. Và tiếp tục như vậy đối với các regex khác xác định các khối khác.

Trên thực tế, khi bạn điều hướng qua tài liệu, một chế độ khác được bật cho mỗi khối.

Tôi đã sử dụng nhiều chế độ để tạo ASP.NET, cho phép tôi chỉnh sửa C #, HTML, CSS và Javascript trong một tệp duy nhất, với cách đánh dấu và phông chữ thích hợp tùy thuộc vào vị trí của con trỏ trong bộ đệm. Nó không hoàn hảo nhưng tôi thấy nó là một sự cải tiến rõ rệt đối với những khả năng hiện có. Trong thực tế, đây có thể là những gì bạn muốn. Hãy thử nó ra.

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


Tôi chỉ cần thử chế độ aspx. Nó hoạt động tuyệt vời. Điều duy nhất tôi đã làm là thay đổi hỗ trợ javascript từ expresso-mode sang javascript-mode.
MakeDummy

7

Không hẳn là một giải pháp tốt nhưng cách khắc phục nhanh nếu bạn thực sự cần có javascript trong html của mình là chọn vùng chứa javascript và sử dụng lệnh narrow-to-region( C-x n n), sau đó chuyển sang chế độ javascript ưa thích của bạn. Lệnh widensẽ đưa bạn trở lại, ( C-x n w).


0

Có vẻ như bạn đã thiết lập nxhtml không chính xác. Thiết lập duy nhất cần thiết là tải autostart.eltệp và sau đó mọi thứ sẽ hoạt động ở một mức độ nào đó. nxhtml không hoàn hảo theo bất kỳ cách nào, nhưng kinh nghiệm của tôi từ việc sử dụng nó cho html / css / javascript / mako là khá tốt, ít nhất là cho mọi thứ trừ mako. Nhưng tôi khá chắc chắn rằng tôi đã gặp rắc rối với phần mako.

Đây là cách tôi khởi tạo nxhtml của mình:

(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))
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.