web-dev-qa-db-ja.com

JavaScriptを含むHTMLファイルを編集するためにemacsを構成するにはどうすればよいですか?

Emacsを使用してHTMLタグとjavascriptコンテンツの両方を含むHTMLファイルを編集するという苦痛な最初のステップを開始しました。 nxhtmlをインストールして使用してみました-.htmlファイルに対してnxhtml-mumamo-modeを使用するように設定しました。しかし、私はそれを愛していません。コードのJavascript部分を編集しているとき、タブのインデントはC/C++コードを編集するときのようには動作しません。行内にタブを配置し始め、行の前の空白でタブを打とうとすると、行を再タブ化するのではなくタブを挿入します。

私が気に入らないもう1つの側面は、通常のC/C++モードのように構文の色付けを行わないことです。 HTMLファイルを編集するときは、デフォルトのJavaモードの動作を非常に好みますが、HTMLコードではうまく動作しません。 :-(

1)Javascript部分を含むHTMLファイルを編集するためのより良いモードはありますか?

2)nxhtmlにjavascript部分にデフォルトのJavaモードを使用させる方法はありますか?

よろしく、

M

91
MakeDummy

別の解決策は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で動作するように正規表現を簡素化しました。非常に正確で壊れやすい正規表現は不要です。

40
Kai Carver

このような使用法のためにメジャーモードweb-mode.elを作成しました:JS、CSS、Java(JSP)、PHPを埋め込むHTMLテンプレートを編集します。ダウンロードは http://web-mode.org Web-mode.elは、ブロックのタイプに応じて構文の強調表示とインデントを行います。インストールは簡単です。

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

いい質問ですね。最初の投票でどれだけの賛成を得たかを確認してください

誰もがあなたと同じ経験をしています。私も。

あなたが説明したのと同じような奇妙さを示すnhtml-modeに頼るのではなく、別のオプションを探して multi-mode.el を見つけました。それは一種の汎用マルチモードスケルトンです。使用するには、正規表現を指定して、あるモードが開始し、別のモードが終了する場所を記述する必要があります。したがって、<script...>はJavaScriptブロックを開始し、<style...> cssブロックを開始します。次に、各ブロックに独自のモードをプラグインします。javascriptのエスプレッソが好きなら、それを使用してください。他のブロックを識別する他の正規表現についても同様です。

実際には、ドキュメントをナビゲートすると、ブロックごとに異なるモードが有効になります。

マルチモードを使用してASP.NETを作成しました。これにより、C#、HTML、CSS、およびJavascriptを1つのファイルで編集でき、カーソルがバッファー内のどこにあるかに応じて適切な強調表示とフォント化が行われます。完全ではありませんが、既存の可能性を著しく改善するものであることがわかりました。実際、これはあなたが望むものかもしれません。やってみよう。

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

13
Cheeso

本当に良い解決策ではありませんが、本当にhtmlにjavascriptを含める必要がある場合の簡単な解決策は、javascriptを含む領域を選択し、コマンドnarrow-to-regionC-x n n)そして、お好みのjavascriptモードに切り替えます。コマンドwidenを使用すると、(C-x n w)。

6
antonj

Nxhtmlを正しく設定していないようです。必要なセットアップはautostart.elファイル、そしてすべてがある程度動作するはずです。 nxhtmlは決して完璧ではありませんが、html/css/javascript/makoにnxhtmlを使用した経験は、少なくともmakoを除くすべての場合に非常に優れています。しかし、私はmako-partを台無しにしたと確信しています。

これは私が私の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))
0
monotux