php-mode是emacs用于编辑php源代码的模式,继承了c-mode的所有特性,遵循PEAR的编码标准,搜索php的手册,代码补全,类浏览。这里介绍如何修改php-mode.el文件,配置.emacs文件实现php库函数的自动补全功能。
一、安装:
fedora的emaacs22版本自带的php-mode是1.4版本的,可以从http://php-mode.sourceforge.net/下载最新版:1.5。下载后解压到某个位置,进入emacs,使用M-x byte-compile-file命令编译php-mode.el源文件。然后将php-mode.elc拷贝到/usr/share/emacs/site-lisp目录,
二、.emacs文件配置如下:
;;加载php-mode
(add-to-list 'load-path "/usr/share/emacs/site-lisp")
(require 'php-mode)
;;根据文件扩展名自动php-mode
(add-to-list 'auto-mode-alist '("\\.php[34]?\\'\\|\\.phtml\\'" . php-mode))
;;开发项目时,php源文件使用其他扩展名
(add-to-list 'auto-mode-alist '("\\.module\\'" . php-mode))
(add-to-list 'auto-mode-alist '("\\.inc\\'" . php-mode))
;;自动补全设置,方法一
(setq php-manual-path "/usr/share/doc/php-manual/en/html/")
;;自动补全设置,方法二
;;使用方法一,在每次补全时都要搜诉php-manual-path目录,速度比较慢,可以使用方法二
;;首先设置变量php-completion代替php-manual-path
(setq php-completion-file "~/.emacs.d/php/php-completion-file")
(如果没有php-manual,可以在php官网下载 http://www.php.net/download-docs.php 选择Many HTML Files即可 )
;;然后在sehll终端生成php-completion-file
;; $ cd /usr/share/doc/php-manual/en/html
;; $ ls -1 function*.html \
;; | sed -e 's/^function\.\([-a-zA-Z_0-9]*\)\.html/\1/' \
;; | tr - _ \
;; > ~/.emacs.d/php/php-completion-file
;; 注:执行这步之前你必须安装php-manual-en软件包:yum install php-manual-en
;;设置emacs在console方式的自动补全的功能键为F9,如果使用emacs 的窗口方式则不必设置这个。
;;因为php-model只设置了在窗口方式下的功能键M-tab。
(global-set-key [(f9)] 'php-complete-function)
三、修改php-mode.el文件
php-mode设置的自动补全的功能键是M-tab,这有两个问题:1、M可以用ALT或者ESC输入,如果按ALT+tab就与系统设置的窗口切换键相同;2、即使用ESC取代ALT,也不会自动补全,提示“No tags table loaded; try M-x visit-tags-table”,这似乎是c-mode的自动补全功能键。所以必须修改这个功能键,这通过修改php-mode.el文件实现。打开php-mode.el文件,找到这里:
(define-key php-mode-map
[(meta tab)]
'php-complete-function)
修改为:
(define-key php-mode-map
[(control tab)]
'php-complete-function)
保存,重新编译,复制php-mode.elc文件到/usr/share/emacs/site-lisp目录。
如果不修改php-mode.el文件,也可以使用php-mode的自动补全功能,但必须使用菜单而不是快捷功能键了,因为无法输入M-tab,而使用菜单的话无疑太慢了。经修改后,在emacs的console方式可以用F9调用补全功能,在emacs的窗口方式则可以同时使用F9和C-tab。