Emacs でリアルタイムに文法チェックする設定

設定後はこうなる

  • 文法エラーが検知されると、エラー部分がハイライトされる
    • 文法エラーは「ruby -c 編集中のファイル」でチェックされる
  • エラー内容をミニバッファで確認できる

設定

Emacs のバージョン
GNU Emacs 22.2.50.1 (i386-apple-darwin9.4.0, Carbon Version 1.6.0) of 2008-07-17 on seijiz.local
flymake の設定

参考サイトにあるflymake の設定を「.emacs.el」に追加する。
僕の場合、Carbon Emacs に付属している「rails.el」を使っていたので、以下のように設定した。「(require 'rails)」だけでもflymake を有効にできるけど、ハイライトが見易くなるように変更している。

(require 'rails)

;; flymake setting
;; http://d.hatena.ne.jp/khiker/20070630/emacs_ruby_flymake
(set-face-background 'flymake-errline "red4")
(set-face-background 'flymake-warnline "dark slate blue")


Carbon Emacsrails.el は「/Applications/Emacs.app/Contents/Resources/site-lisp/rails/」内にあって、この中でロードされる「rails-ruby.el」でflymake の設定が行われている。

エラー内容をミニバッファで確認できるようにする

デフォルトの機能だと、エラー部分にカーソルを合わせて「C-cd」でエラー内容がポップアップする。これをミニバッファに出すようにするよう設定。

(defun flymake-display-err-minibuf () 
  "Displays the error/warning for the current line in the minibuffer"
  (interactive)
  (let* ((line-no             (flymake-current-line-no))
         (line-err-info-list  (nth 0 (flymake-find-err-info flymake-err-info line-no)))
         (count               (length line-err-info-list))
         )
    (while (> count 0)
      (when line-err-info-list
        (let* ((file       (flymake-ler-file (nth (1- count) line-err-info-list)))
               (full-file  (flymake-ler-full-file (nth (1- count) line-err-info-list)))
               (text (flymake-ler-text (nth (1- count) line-err-info-list)))
               (line       (flymake-ler-line (nth (1- count) line-err-info-list))))
          (message "[%s] %s" line text)
          )
        )
      (setq count (1- count)))))

(add-hook
'ruby-mode-hook
'(lambda ()
   (define-key ruby-mode-map "\C-cd" 'flymake-display-err-minibuf)))


これで、「C-cd」でエラー内容がミニバッファに出るようになる。