js2-mode は確かにいいんですが、こちらやこちらで言及されてるようにデフォルトだと暴れん坊で使いこなせません。
特にTAB幅が8でインデント幅が2だったりする辺りについていけなかったので、オレはこう設定しました。
(autoload 'js2-mode "js2" nil t)
(add-to-list 'auto-mode-alist '("\\.js$" . js2-mode))
(add-hook 'js2-mode-hook
'(lambda ()
(setq js2-basic-offset 4
tab-width 4
indent-tabs-mode nil
js2-cleanup-whitespace nil)))TAB文字は使わずに全部スペースで幅4でインデントする感じです。これで一気に大人しくなってくれました。
ただし、全角スペースや半角スペースの色付けの設定は飛んじゃいました。js2-modeのシンタクスハイライトに負けてるのかなと予想*1。
しかし、これ設定するだけで1時間以上の苦闘。やっぱ今後のこと考えると、elispは本腰入れて学んでおいた方がいい気がします。正直行って今使ってるemacsの動きには満足行ってないので*2、もっとなんとかしたいです。
追記1/12
ただし、全角スペースや半角スペースの色付けの設定は飛んじゃいました。
jaspace.elを入れて、以下の設定しといたら普通に有効になりました。
(setq jaspace-modes (append jaspace-modes
(list 'js2-mode)))
*1:過程でjaspace.elなるものを見つけたので乗り換えるかな