flymakeを設定し、perlのシンタックスチェックをする

Posted by Tatsuyano on Tue, Aug 21, 2012
In
Tags emacs, perl

はじめに

perlのシンタックスチェックをflymakeで行うには、事前に「set-perl5lib.el」をインストールする必要があります。

set-perl5lib.elのインストール

cd .emacs.d/elisp/
wget http://svn.coderepos.org/share/lang/elisp/set-perl5lib/set-perl5lib.el

.emacsの設定

;; flymake for perl
(require 'flymake)
(require 'set-perl5lib) ;; http://svn.coderepos.org/share/lang/elisp/set-perl5lib/set-perl5lib.el

(defvar flymake-perl-err-line-patterns '(("\\(.*\\) at \\([^ \n]+\\) line \\([0-9]+\\)[,.\n]" 2 3 nil 1)))
(defconst flymake-allowed-perl-file-name-masks '(("\\.pl$" flymake-perl-init)
                                                ("\\.pm$" flymake-perl-init)
                                                ("\\.t$" flymake-perl-init)
                                                ))

(defun flymake-perl-init ()
  (let* ((temp-file (flymake-init-create-temp-buffer-copy
                       'flymake-create-temp-inplace))
         (local-file (file-relative-name
                      temp-file
                      (file-name-directory buffer-file-name))))
  (list "perl" (list "-wc" local-file))))

(defun flymake-perl-load ()
  (interactive)
  (set-perl5lib)
  (defadvice flymake-post-syntax-check (before flymake-force-check-was-interrupted)
    (setq flymake-check-was-interrupted t))
  (ad-activate 'flymake-post-syntax-check)
  (setq flymake-allowed-file-name-masks (append flymake-allowed-file-name-masks flymake-allowed-perl-file-name-masks))
  (setq flymake-err-line-patterns flymake-perl-err-line-patterns)
  (flymake-mode t))

(add-hook 'cperl-mode-hook '(lambda () (flymake-perl-load)))

(defun next-flymake-error ()
  (interactive)
  (flymake-goto-next-error)
  (let ((err (get-char-property (point) 'help-echo)))
    (when err
      (message err))))
(global-set-key "\M-e" 'next-flymake-error)

実行画面

参考サイト

以下のサイトを参考にさせていただきました。ありがとうございます!