Evil使いのelispデバッグ風景
( ´_ゝ`)ノシ
yoshitiaです。
この記事はEvil Advent Calendar 2014の7日目の記事になります。
先日、web-modeで出てくる
File mode specification error: (void-variable web-mode-html-offset)
の対処ですが、
emacs: web-mode のインデント設定が効かない - yoshitia’s diary
よりまともなやり方が見つかったので記事にします。
対処法
私の場合、highlight-indentation-modeが原因でした。
highlight-indentation-modeはメジャーモードがweb-modeの時に
変数web-mode-html-offsetを参照する仕様になってるっぽいので
highlight-indentation.elを直接開いて
web-mode-html-offset
(web-modeの古いバージョンで使われていた変数)
を検索、
web-mode-markup-indent-offset
(web-modeの新しいバージョンで使われていた関数)
に書き換えれば解決します。
対処法を探したやり方
ここからが本題。
結果としてweb-mode自体が原因でなかったので
どれが原因かを探す方法が必要だと思うので書いておきます。
emacsネイティブ?の方には常識かもですが
M-x backtrace
(普通よりエラーを詳しく表示してくれる関数)
を入力してからhtmlなどを開いて
メジャーモードをweb-modeに切り替えます。
すると同じ
(void-variable web-mode-html-offset)
メッセージが出てきますが手前の部分に
エラーが発生してるモードが表示されます。
私の例の様にhighlight-indentation-modeでなくても
問題のモードのファイルを開いて
web-mode-html-offset
を検索して見つけた部分を書き直せば
多分解決するんじゃないかと。
この記事のEvil要素は?
( ´_ゝ`)
インデント設定効いてないと
Evilでの操作、
i<TAB><down><ESC>
の後のドットコマンドが役に立たないのです。
(Vim ドットコマンドで調べると便利)
M-x backtraceの存在を知ってもらえれば、
と言う意図で。
プラグインの名前が付いてるのですごくわかりやすいです。