ฉันจะกำหนดค่า emac สำหรับแก้ไขไฟล์ HTML ที่มี Javascript ได้อย่างไร


94

ฉันได้เริ่มขั้นตอนแรกที่เจ็บปวดในการใช้ emac เพื่อแก้ไขไฟล์ HTML ที่มีทั้งแท็ก HTML และเนื้อหาจาวาสคริปต์ ฉันได้ติดตั้ง nxhtml และลองใช้แล้วนั่นคือตั้งค่าให้ใช้ nxhtml-mumamo-mode สำหรับไฟล์. html แต่ฉันไม่ได้รักมัน เมื่อฉันแก้ไขส่วน Javascript ของโค้ดการเยื้องแท็บจะไม่ทำงานเหมือนที่ทำเมื่อแก้ไขโค้ด C / C ++ เริ่มวางแท็บไว้ในบรรทัดและหากคุณลองกดแท็บในช่องว่างก่อนหน้าบรรทัดแท็บนั้นจะแทรกแท็บแทนการจัดแท็บบรรทัดใหม่

อีกแง่หนึ่งที่ฉันไม่ชอบคือมันไม่ได้ทำสีไวยากรณ์เหมือนโหมด C / C ++ ทั่วไป ฉันชอบพฤติกรรมของโหมดจาวาเริ่มต้นมากเมื่อแก้ไขไฟล์ HTML แต่ไม่สามารถเล่นกับโค้ด HTML ได้ดี :-(

1) มีโหมดที่ดีกว่าสำหรับการแก้ไขไฟล์ HTML ด้วยส่วน Javascript หรือไม่?

2) มีวิธีรับ nxhtml เพื่อใช้ java-mode เริ่มต้นสำหรับส่วน javascript หรือไม่?

ความนับถือ,


ฉันใช้โหมด MMM ซึ่งในทางทฤษฎีทำแบบนี้ แต่มันแย่มากฉันไม่ค่อยพอใจกับมันเท่าไหร่ ฉันได้วางเสียงกระเพื่อมจำนวนมากลงใน config ของฉันจาก emacswiki แต่ไม่ได้ใช้เวลาหลายสัปดาห์กับมัน ฉันหวังว่ามันจะง่ายกว่าสำหรับพวกเราที่สนใจใช้ emac มากกว่าการกำหนดค่า
นาธาน

1
ฉันเดาว่าวิธีแก้ปัญหาคือการสร้างไฟล์สองไฟล์และอ้างอิงไฟล์จาวาสคริปต์ด้วยไฟล์<script src>. คุณสามารถดูพวกเขาทั้งสองมีบิตของC-x 2หรือC-x 3และมีโหมดสำหรับแต่ละ : - /
Patrick

คำตอบ:


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

อัปเดต: ทำให้ regexps ง่ายขึ้นเพื่อตรวจจับพื้นที่ JavaScript หรือ CSS เพื่อให้ทำงานกับ HTML5 - ไม่จำเป็นต้องมีนิพจน์ทั่วไปที่แม่นยำและเปราะบาง


ฉันมีปัญหาในการรวมกับ flymake
juanmirocks

เพื่อจัดการกับกรณีอื่น ๆ เช่น html5 ตอนนี้ฉันใช้คำอธิบายแท็กที่เรียบง่ายและน่าให้อภัยมากขึ้นสำหรับ JavaScript และ CSS:(js-mode "<script[^>]*>" "</script>") (css-mode "<style[^>]*>" "</style>")
Kai Carver

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

รองรับเครื่องมือ play / razor!
juanmirocks

สวัสดี fxbois ทำไมสิ่งนี้ถึงไม่เหมาะกับฉัน ฉันคัดลอก web-mode.el ลงใน / use / local / share / emacs / site-lisp / (และลบไฟล์. el อื่น ๆ ทั้งหมด) และทำตามส่วน "ติดตั้ง" ที่ web-mode.org (และไฟล์. emacs เท่านั้น มีไม่กี่บรรทัด) คุณสามารถช่วย? ขอบคุณ.
Tony Xu

1
คุณช่วยโหลดไฟล์ we-mode.el ใน emacs และหลังจาก Mx web-mode ได้
ไหม

14

คำถามที่ดี ดูว่าคุณได้รับการโหวตครั้งแรกกี่คะแนน!

ทุกคนมีประสบการณ์เช่นเดียวกับคุณ ฉันด้วย.

แทนที่จะพึ่งพา n เอาท์พุต HTML โหมดซึ่งจัดแสดงในประเภทเดียวกันของแปลกสำหรับฉันเป็นคุณอธิบายผมมองหาตัวเลือกอื่นและพบว่าหลาย mode.el มันเป็นโครงกระดูกเอนกประสงค์หลายโหมด ในการใช้งานคุณต้องระบุนิพจน์ทั่วไปเพื่ออธิบายว่าโหมดหนึ่งเริ่มต้นที่ใดและอีกโหมดหนึ่งสิ้นสุดลง ดังนั้นคุณมองหา<script...>เพื่อเริ่มบล็อกจาวาสคริปต์และ<style...>เริ่มบล็อก css จากนั้นคุณเสียบโหมดของคุณเองสำหรับแต่ละบล็อก - ถ้าคุณชอบเอสเปรสโซสำหรับจาวาสคริปต์ให้ใช้ และอื่น ๆ สำหรับ regexes อื่น ๆ ที่ระบุบล็อกอื่น ๆ

ในทางปฏิบัติเมื่อคุณสำรวจเอกสารโหมดต่างๆจะเปิดใช้งานสำหรับแต่ละบล็อก

ฉันใช้โหมดหลายโหมดเพื่อสร้าง ASP.NET ซึ่งช่วยให้ฉันแก้ไข C #, HTML, CSS และ Javascript ในไฟล์เดียวโดยมีการไฮไลต์และฟอนต์ที่เหมาะสมขึ้นอยู่กับตำแหน่งที่เคอร์เซอร์อยู่ในบัฟเฟอร์ มันไม่สมบูรณ์แบบ แต่ฉันพบว่ามันเป็นการปรับปรุงที่ชัดเจนสำหรับความเป็นไปได้ที่มีอยู่ ในความเป็นจริงนี่อาจเป็นสิ่งที่คุณต้องการ ลองใช้งาน

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


ฉันเพิ่งลองใช้โหมด aspx มันใช้งานได้ดี สิ่งเดียวที่ฉันทำคือเปลี่ยนการสนับสนุนจาวาสคริปต์จากโหมด Expresso เป็นโหมดจาวาสคริปต์
MakeDummy

7

ไม่ใช่วิธีแก้ปัญหาที่ดี แต่การแก้ไขอย่างรวดเร็วหากคุณจำเป็นต้องมีจาวาสคริปต์ใน html ของคุณคือการเลือกภูมิภาคที่มีจาวาสคริปต์และใช้คำสั่งnarrow-to-region( C-x n n) จากนั้นเปลี่ยนเป็นโหมดจาวาสคริปต์ที่คุณต้องการ คำสั่งwidenจะนำคุณกลับมา ( C-x n w)


0

ดูเหมือนว่าคุณตั้งค่า nxhtml ไม่ถูกต้อง การตั้งค่าเดียวที่จำเป็นคือการโหลดautostart.elไฟล์จากนั้นทุกอย่างจะทำงานได้ในระดับหนึ่ง nxhtml ไม่สมบูรณ์แบบ แต่อย่างใด แต่ประสบการณ์ของฉันจากการใช้ html / css / javascript / mako นั้นค่อนข้างดีอย่างน้อยสำหรับทุกอย่างยกเว้น 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))
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.