PerlとEmacsと私
今回は筆者のEmacs(と言ってもMeadow2なんですが)のPerlに関する設定を一部抜粋してみようと思います。
(autoload 'cperl-mode "cperl-mode" nil t) ;; cperl-modeを使ってます。 (add-to-list 'interpreter-mode-alist '("perl" . cperl-mode)) ;; shebang(#!…)に"perl"があったらcperl-mode (add-to-list 'auto-mode-alist '("\\.\\(p[lm]\\|f?cgi\\|t\\)$" . cperl-mode)) ;; こういう拡張子もcperl-mode (defalias 'perl-mode 'cperl-mode) ;; perl-modeもcperl-mode ;; 色が気に入らないので直してみたり (set-face-italic-p 'cperl-hash-face nil) (set-face-background 'cperl-hash-face nil) (set-face-background 'cperl-array-face nil) (setq cperl-array-face 'font-lock-variable-name-face) (setq cperl-hash-face 'font-variable-name-face) ;; キーバインドが気に入らないので直してみたり (define-key cperl-mode-map "\C-c\C-c" 'cperl-comment-region) ;; C-c C-cでコメントアウト (define-key cperl-mode-map "\C-u\C-c\C-c" 'uncomment-region) ;; cperl-uncomment-region is buggy
PodからコードをコピペしたときについてしまうインデントをEmacsでどうやって消すか - ヒルズで働く@robarioの技ログでもちょこっと紹介したperltidy-region
もっと interactive を使おう - odz bufferの設定の方が簡単でキレイです。
;; 指定領域をperltidy (defun perltidy-region () "Run the perltidy parser on the current region." (interactive) (let ((start (mark)) (end (point)) (shell-command-default-error-buffer "perltidy-errors") (command "perltidy")) (shell-command-on-region start end command t t shell-command-default-error-buffer))) ;; 上記のbuffer全体版 (defun perltidy-buffer () "Run the perltidy parser on the current buffer." (interactive) (save-excursion (mark-whole-buffer) (perltidy-region)))
ffap-cperl-mode - Perlモジュールのソースをその場で開くelisp - ヒルズで働く@robarioの技ログで紹介したもの。
(defun ffap-cperl-mode (file) (let ((real-file (shell-command-to-string (concat "perldoc -ml " file)))) (unless (string-match "No module found for " real-file) (substring real-file 0 -1) ))) (add-to-list 'ffap-alist '(cperl-mode . ffap-cperl-mode)) ;; ソースよりPODドキュメントを良く見る人は ;; (add-to-list 'ffap-alist '(cperl-mode . cperl-perldoc-at-point)) ;; としても良いと思います。
他にはauto-insertで.plや.pmを新規作成した時にテンプレートが挿入されたりとかしてます。その辺は長くなるので割愛。
うおー、これは知らなかったあ。→Programming in Emacs Lisp: Writing Defuns
「これは」というか、EmacsLisp自体ほとんど知らないんです。perltidy-regionもどっかのをコピペしただけなのです。(´ρ`)
id:odzさん、ありがとうございました!