Javascript içeren HTML dosyalarını düzenlemek için emac'leri nasıl yapılandırabilirim?


94

Hem HTML etiketleri hem de javascript içeriği olan bir HTML dosyasını düzenlemek için emacs kullanmanın zahmetli ilk adımlarını başlattım. Nxhtml'yi kurdum ve kullanmayı denedim - yani .html dosyaları için nxhtml-mumamo-modunu kullanacak şekilde ayarladım. Ama onu sevmiyorum. Kodun Javascript bölümünü düzenlerken, sekme girintileri C / C ++ kodunu düzenlerken yaptıkları gibi davranmıyor. Satır içine sekmeler koymaya başlar ve bir satırın önündeki beyaz boşlukta sekmeye basmaya çalışırsanız, satırı yeniden sekmelere ayırmak yerine sekmeyi ekler.

Sevmediğim bir başka özellik de, normal C / C ++ modlarının yaptığı gibi sözdizimi renklendirmesi yapmamasıdır. HTML dosyalarını düzenlerken varsayılan java modunun davranışını tercih ederim, ancak bu HTML koduyla iyi oynamıyor. :-(

1) HTML dosyalarını Javascript bölümleri ile düzenlemek için daha iyi bir mod var mı?

2) javascript bölümleri için varsayılan java modunu kullanmak üzere nxhtml almanın bir yolu var mı?

Saygılarımızla,

M


MMM modunu kullanıyorum, teoride bunu yapıyor ama biraz berbat, bundan pek memnun değilim. Emacswiki'deki yapılandırmama çok sayıda lisp yapıştırdım ama bunun üzerine gerçekten haftalar harcamadım. Keşke bunu yapılandırmaktan çok emac kullanmakla ilgilenenler için daha basit olsaydı.
Nathan

1
Sanırım bir geçici çözüm iki dosya oluşturmak ve javascript dosyasına bir <script src>. İkisini de biraz izleyebilir C-x 2veya C-x 3her biri için bir moda sahip olabilirsiniz. : - /
Patrick

Yanıtlar:


41

Başka bir çözüm şudur multi-web-mode:

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

daha önce belirtilenden daha kolay yapılandırılabilir olabilir multi-mode.

.emacsDosyanızda tercih ettiğiniz modları şu şekilde yapılandırırsınız :

(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'in çoklu modları (iç çekme) hakkında daha fazla bilgiyi burada bulabilirsiniz:

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

GÜNCELLEME: Düzenli ifadeleri, HTML5 ile çalışmasını sağlamak için JavaScript veya CSS alanlarını algılayacak şekilde basitleştirdi - süper hassas ve hassas normal ifadelere gerek yok.


Flymake ile birleştirirken sorun yaşadım
juanmirocks

html5 gibi daha fazla durumu işlemek için artık JavaScript ve CSS için daha basit ve daha bağışlayıcı etiket açıklamaları kullanıyorum:(js-mode "<script[^>]*>" "</script>") (css-mode "<style[^>]*>" "</style>")
Kai Carver

32

Bu tür bir kullanım için ana mod web-mode.el'i yazdım: JS, CSS, Java (JSP), PHP'yi yerleştiren HTML şablonlarını düzenleme. Http://web-mode.org adresinden indirebilirsiniz Web-mode.el, bloğun türüne göre sözdizimi vurgulama ve girinti yapar. Kurulum basittir:

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

1
web modu da paket olarak mevcuttur. En azından MELPA'dan.
mcginniwa

Oyun / jilet motor desteği var!
juanmirocks

Merhaba fxbois, bu neden benim için çalışmıyor? Web-mode.el dosyasını / use / local / share / emacs / site-lisp / içine kopyaladım (ve diğer tüm .el dosyalarını kaldırdım) ve web-mode.org'daki (ve yalnızca .emacs dosyasını) "Install" bölümünü takip ettim bu birkaç çizgiye sahiptir). Yardım edebilir misin lütfen? Teşekkürler.
Tony Xu

1
We-mode.el dosyasını emacs içinde ve Mx web-
mode'dan

14

Harika soru. İlkinde kaç olumlu oy aldığına bir bak!

Herkes sizinle aynı deneyime sahiptir. Ben de.

Benim için tarif ettiğiniz gibi aynı tuhaflığı sergileyen nhtml-mode'a güvenmek yerine, başka bir seçenek aradım ve multi-mode.el buldum . Bu bir çeşit genel amaçlı çok modlu iskelet. Bunu kullanmak için, bir modun nerede başladığını ve diğerinin nerede bittiğini açıklamak için normal ifadeler belirlemeniz gerekir. Yani, <script...>bir javascript bloğu <style...>başlatmak ve bir css bloğu başlatmak için arıyorsunuz . Daha sonra her blok için kendi modlarınızı takarsınız - JavaScript için espressoyu seviyorsanız kullanın. Ve diğer blokları tanımlayan diğer normal ifadeler için de böyle devam eder.

Pratikte, belgede gezinirken, her blok için farklı bir mod etkinleştirilir.

C #, HTML, CSS ve Javascript'i tek bir dosyada, imlecin arabellekte nerede olduğuna bağlı olarak uygun vurgulama ve yazı tipiyle düzenlememe izin veren bir ASP.NET oluşturmak için çoklu mod kullandım. Mükemmel değil ama mevcut olasılıklarda belirgin bir gelişme olduğunu gördüm. Aslında istediğiniz bu olabilir. Denemek.

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


Aspx modunu denemeye yeni başladım. Harika çalıştı. Yaptığım tek şey javascript desteğini expresso modundan javascript moduna değiştirmekti.
MakeDummy

7

Gerçekten iyi bir çözüm değil, ancak html'nizde javascript olması gerekiyorsa hızlı bir çözüm, javascript içeren bölgeyi seçmek ve narrow-to-region( C-x n n) komutunu kullanmak ve ardından tercih ettiğiniz javascript moduna geçmektir. Komut widensizi geri getiriyor ( C-x n w).


0

Görünüşe göre nxhtml'nizi yanlış ayarlamışsınız. Gerekli olan tek kurulum autostart.eldosyayı yüklemek olmalı ve ardından her şey bir seviyeye kadar çalışmalıdır. nxhtml hiçbir şekilde mükemmel değildir, ancak onu html / css / javascript / mako için kullanma deneyimlerim oldukça iyidir, en azından mako dışında her şey için. Ama mako parçasını batırdığıma oldukça eminim.

Nxhtml'mi şu şekilde başlatıyorum:

(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))
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.