教你怎么配置 Emacs 的 PHP 开发环境
最近,给我逮到一个机会安利 emacs。天,这简直正中我的下怀啊,我把我 喜欢的那些功能 都讲了一笔,从 dired 到动态缩写扩展,再到 ispell 这种广受赞誉的包。
我跟他们讲拥有这么一个完全可编程的,自文档的编辑器是多么的强力。我相信,经过我的布道,一定有新人加入我们的部落中。
然后,在昨天的时候,有人吻了我一个问题差点颠覆了我的观点: 该用哪个 mode 来编辑 PHP 呢?
考虑到我写代码大多数都是 PHP,你可能会觉得我早已有了明确的答案. 可惜,我现在的解决方案用到了一些 hacked code,我并不建议普通人使用我现在的这种解决方案。
这下糟了,我只能草草结束会议并承诺去寻找目前最新的 PHP 解决方案是什么再告诉他们。
PHP 事实上是一门对编辑器来说很棘手的编程语言. 因为它的写作风格很多变,它即可能写的好些是 C 语言代码一样,也可能写成一坨由 C,HTML,CSS 及 JavaScript 混在一起的东西。
Emacs 上的一个老问题就是总是有太多的不完美的解决方案. 看看 emacs wiki 你就知道我是什么意思了,你会看到太多方案,但是没有一个方案是完美的.
不过经过我艰苦卓绝的实验,我相信我已经成功找到用 emacs 编辑 PHP 的合理方案,下面是配置的过程:
Step 1: Setup Melpa
Melpa 是一个代码库,emacs 可以从这里直接拉取 package. 在以前,为 Emacs 添加一个 package 需要经历下载,解压,编译这么多步骤. 不过现在这些动作都被自动化串联起来了,而且全部都在 Emacs 中完成的。
你可以按照 这里 的说明来添加 Melpa. 如果你用的是新版 Emacs 的话,基本上只需要把下面代码添加到 .emacs
就行了。
(add-to-list 'package-archives
'("melpa" . "https://melpa.org/packages/"))
Step 2: Install the Melpa available PHP Mode
Emacs 自带了一个 PHP mode, 但是 这个 php-mode 更现代些. 它的 README 中甚至提及了 PHP 7, 说明这个 php-mode 足够新,能够支持最新的语法.
用 Melpa 安装这个 mode 超级简单. 只需要运行: M-x package-install
然后输入 php-mode
即可.
安装好后,我将缩进设置为 2 个空格而不是空格,关闭对 HTML 的支持并启用 subword-mode . 所有这些设置都由一个函数来完成,并且该函数被纳入到 php-mode-hook
中了:
(defun bs-php-mode-hook ()
(setq indent-tabs-mode nil)
(setq c-basic-offset 2)
(setq php-template-compatibility nil)
(subword-mode 1))
(add-hook 'php-mode-hook 'bs-php-mode-hook)
Step 3: Install Web-Mode.el
上面的 php-mode 比较适合于以 PHP 为主的文件. 对于那些包含 HTML,CSS 和 Javascript 的文件就要用到 web-mode.el 了.
web-mode 的 安装 与配置跟 php-mode 类似:
(defun bs-web-mode-hook ()
(local-set-key '[backtab] 'indent-relative)
(setq indent-tabs-mode nil)
(setq web-mode-markup-indent-offset 2
web-mode-css-indent-offset 2
web-mode-code-indent-offset 2))
(add-hook 'web-mode-hook 'bs-web-mode-hook)
Web-mode.el 特别好用,我觉得它几乎就能满足我所有的 PHP 需求了. 如果真的是这样的话,我可能会弃用 php-mode. 不过就目前来说,我觉得在两个 mode 之间切换蛮好的.
Step 4: Add a Quick Mode Toggle
收到 EmacsWiki 上 这条 tip 的启发 , 我写了个函数来快在 php-mode 和 web-mode 之间快速切换。
下面是这个函数的源代码:
(defun toggle-php-flavor-mode ()
(interactive)
"Toggle mode between PHP & Web-Mode Helper modes"
(cond ((string= mode-name "PHP")
(web-mode))
((string= mode-name "Web")
(php-mode))))
(global-set-key [f5] 'toggle-php-flavor-mode)
现在我只要按下 F5 就能切换到另一种编辑模式下了。
我还可以指定哪些文件是纯代码,哪些文件是纯标签的. 我可以通过代码来指定在 snippets
目录中的文件,总是用 web-mode
打开; 在 lib
下的文件,总是用 php-mode
打开。
这就是拥有一款完全编程能力编辑器的乐趣呀,我的地盘我做主!
Step 5: Bonus - Setup aggressive auto-completion
为了让 Emacs 更好用,我决定试试 ac-php , 这是一个能提供函数和类名补全的库. 我按照 这里写的过程安装 , 按下面写的方法更新我的 .emacs
文件, 在我的项目根目录中创建一个名为 .ac-php-conf.json
的空文件,然后执行 M-x ac-php-remake-tags-all
. 完成这些操作后, emacs 就可以实现自动补全了:
(defun bs-php-mode-hook ()
(auto-complete-mode t) ;; «
(require 'ac-php) ;; «
(setq ac-sources '(ac-source-php )) ;; «
(yas-global-mode 1) ;; «
(setq indent-tabs-mode nil)
(setq php-template-compatibility nil)
(setq c-basic-offset 2))
丢弃了乱糟糟的 PHP 代码,替之以现代的,功能繁多的,易安装的牛逼代码,这种感觉真是太好了。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: 降低 Emacs 启动时间的高级技术
下一篇: 彻底找到 Tomcat 启动速度慢的元凶
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论