読者です 読者をやめる 読者になる 読者になる

Emacs で Perl のコードを補完したい

Perl や JavaScript で書くときに ruby-electric-mode が恋しくなる - gan2 の Ruby 勉強日記
perlplusでシンボルを補完 - gan2 の Ruby 勉強日記
を見て便利そうだったので試してみた。


perlplus.el をロードパスの通ったディレクトリに入れて、以下を .emacs に追加すればOK。M-o で Perl予約語などが補完できるようになる。

;;; cperl-mode の設定
;;; http://d.hatena.ne.jp/gan2/20071019/1192791373
(defalias 'perl-mode 'cperl-mode)
(autoload 'cperl-mode
  "cperl-mode"
  "alternate mode for editing Perl programs" t)
(setq auto-mode-alist
      (append '(("\\.\\([pP][Llm]\\|al\\)$" . cperl-mode))
              auto-mode-alist ))
(setq cperl-indent-level 2
      cperl-hairy t
      cperl-font-lock t)

;;; perl の予約語を補完
;;; http://d.hatena.ne.jp/gan2/20071027/1193441140
(add-hook 'cperl-mode-hook
          (lambda ()
            (require 'perlplus)
            (local-set-key "\M-o" 'perlplus-complete-symbol)
            (perlplus-setup)
            (set-face-bold-p 'cperl-array-face nil)
            (set-face-background 'cperl-array-face "black")
            (set-face-bold-p 'cperl-hash-face nil)
            (set-face-italic-p 'cperl-hash-face nil)
            (set-face-background 'cperl-hash-face "black")

;; ここは嘘かも。Emacs に入った状態で .pl ファイル開くとこんなエラーが出る
;; File mode specification error: (error "Key sequence C-h f starts with non-prefix key C-h")
;; C-h が使えなくて困る
;            (eval-after-load "cperl-mode"
:              '(define-key cperl-mode-map "\C-h" 'backward-delete-char))

;; 上の問題の解決?cperl-mode で定義されてる C-h のバインドを解除
;; http://wota.jp/ac/?date=20070725
             (local-unset-key "\C-h")

            ))


自分の環境(colinux + Fedora7 + GNU Emacs 22.1.1)では cperl-mode ではなく、なぜか perl-mode が起動されてしまうので、以下のようなエイリアスを使って無理やり cperl-mode を起動するようなコードが追加してある。

(defalias 'perl-mode 'cperl-mode)


ちなみに、自分の環境では、perl-mode.elc と cperl-mode.elc は「/usr/share/emacs/22.1/lisp/progmodes」に置いてあった。*.elc っていうのは *.elファイルをバイトコンパイルしたファイルに付けられる拡張子らしい。