EmacsでPHP環境を整えてみる
元々、PHPもJavaもRubyもJavascriptもHTMLやらCSSまで全部Eclipseでを使って書いてきたんですが、
アシアルぶろぐさんのPHP開発で追加しておきたいEmacs Lisp 8選を見て、うおー、Emacsで書いてみたいなーと思い、参考にして環境を整えてみました。
Emacsは触れるけど設定が良くわかんない初心者なので結構苦戦しました。
とりあえず必要そうなものを全部取ってくる
# php-mode wget http://jaist.dl.sourceforge.net/sourceforge/php-mode/php-mode-1.2.0.tgz tar xfvz php-mode-1.2.0.tgz cp php-mode.el /usr/share/emacs/site-lisp/ # phpマニュアル wget http://jp.php.net/get/php_manual_ja.tar.gz/from/this/mirror tar xfvz php_manual_ja.tar.gz mkdir -p /usr/local/share/php/doc/ cp -r html /usr/local/share/php/doc/ # css-mode wget http://www.garshol.priv.no/download/software/css-mode/css-mode.el cp css-mode.el /usr/share/emacs/site-lisp/ # javascript-mode wget http://web.archive.org/web/20060321004800/http://web.comhem.se/~u83406637/emacs/javascript.el cp javascript.el /usr/share/emacs/site-lisp/ # mmm-mode wget http://jaist.dl.sourceforge.net/sourceforge/mmm-mode/mmm-mode-0.4.8.tar.gz tar xfvz mmm-mode-0.4.8.tar.gz mkdir /usr/share/emacs/site-lisp/mmm-mode cd mmm-mode-0.4.8 cp mmm-mode-0.4.8/*.el /usr/share/emacs/site-lisp/mmm-mode # Mule-UCS wget http://www.meadowy.org/~shirai/elisp/mule-ucs.tar.gz tar xfvz mule-ucs.tar.gz mkdir -p /usr/share/emacs/site-lisp/Mule-UCS cd mule-ucs-20061127-1/ emacs -q --no-site-file -batch -l mucs-comp.el cp -r lisp/* /usr/share/emacs/site-lisp/Mule-UCS/ # svn wget http://www.xsteve.at/prg/emacs/psvn.el cp psvn.el /usr/share/emacs/site-lisp/ # ElScreen wget ftp://ftp.morishima.net/pub/morishima.net/naoto/ElScreen/elscreen-1.4.5.tar.gz tar xfvz elscreen-1.4.5.tar.gz cp elscreen-1.4.5/elscreen.el /usr/share/emacs/site-lisp/
php-modeのコンパイル
参考にしたサイトで結構やっていたのでマネして、Emacs上でコンパイルしておく。
M-x : byte-compile-file
Byte compile file: /usr/share/emacs/site-lisp/php-mode.el
上手く動かない。
ElScreenが動かない。
elscreen.elの(require 'alist)の部分で、alistが無いよと怒られる。
alistって何?と思って調べるとAPELというライブラリに入ってるっぽいので拾ってくる。
wget http://kanji.zinbun.kyoto-u.ac.jp/~tomo/lemi/dist/apel/apel-10.7.tar.gz mkdir /usr/share/emacs/site-lisp/apel cp apel-10.7/* /usr/share/emacs/site-lisp/apel/
PHPの関数補完がうまくいかない
php-manual-path上に、htmlマニュアルを置いておけば「M-Tab」で補完ができるらしんだけど上手くいかない。
visit-tags-tableが〜〜とか言われて、etagsを読み込んでくれと言われる。
http://ww1.netzologie.de/php/phpeditor-emacs.php にetagsがupされていたので貰う。感謝。
wget http://ww1.netzologie.de/php/dateien/phpetags.zip
unzip phpetags.zip
mv phpetags /usr/local/share/php/etags
結局htmlの方は使わないことに。
.emacs 修正
いろいろ悩んで最終的にできた.emacs
ElScreenは「C-z」がGNU Screenとかぶったので、どうやって共存させるんだろー?と思いつつ結局保留。*1
後、puttyから使うと「M-Tab」がWindowsの表示切替になって使えなかったので、「M-j」にしてみた(どこかで見た)。
;; Mule-UCS (require 'un-define) ;; 起動が遅すぎたのでとりあえずjisx0213は外してみた ;;(require 'jisx0213) (set-language-environment "Japanese") (set-default-coding-systems 'utf-8) (set-terminal-coding-system 'utf-8) (set-keyboard-coding-system 'utf-8) (set-clipboard-coding-system 'utf-8) ;; global (global-font-lock-mode t) (require 'font-lock) ;; php-mode (autoload 'php-mode "php-mode") (setq auto-mode-alist (cons '("\\.php\\'" . php-mode) auto-mode-alist)) (setq php-mode-force-pear t) (add-hook 'php-mode-user-hook '(lambda () (define-key php-mode-map "\M-j" 'php-complete-function) (define-key php-mode-map "\C-m" 'newline-and-indent) (c-toggle-auto-hungry-state 1) (setq php-manual-path "/usr/local/share/php/doc/html") (setq php-manual-url "http://www.phppro.jp/phpmanual/") (setq tags-file-name "/usr/local/share/php/etags/TAGS"))) ;; css-mode (autoload 'css-mode "css-mode") (setq auto-mode-alist (cons '("\\.css\\'" . css-mode) auto-mode-alist)) (setq cssm-indent-function #'cssm-c-style-indenter) (add-hook 'css-mode-hook '(lambda () (define-key cssm-mode-map (read-kbd-macro "M-j") 'cssm-complete-property))) ;; javascript-mode (add-to-list 'auto-mode-alist (cons "\\.js\\'" 'javascript-mode)) (autoload 'javascript-mode "javascript" nil t) (setq js-indent-level 4) ;; MMM-mode (require 'mmm-auto) (setq mmm-global-mode 'maybe) (setq mmm-submode-decoration-level 2) (set-face-bold-p 'mmm-default-submode-face t) (set-face-background 'mmm-default-submode-face "black") (mmm-add-classes '((embedded-css :submode css-mode :front "<style[^>]*>" :back "</style>"))) (mmm-add-mode-ext-class nil "\\.html\\'" 'embedded-css) ;; Subversion (autoload 'svn-status "psvn" nil t) ;; ElScreen (require 'elscreen) (if window-system (define-key elscreen-map "\C-z" 'iconify-or-deiconify-frame) (define-key elscreen-map "\C-z" 'suspend-emacs))
とりあえず動いたよ!ってレベルでしか確認してないので、今後ドンドン改良していこう。
それにしてもEmacsの設定は難しい…。
*1:コメント欄で教えていただきました。ありがとうございます。