教你怎么配置 Emacs 的 PHP 开发环境

发布于 2024-08-05 13:25:45 字数 5428 浏览 6 评论 0

最近,给我逮到一个机会安利 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

青丝拂面

暂无简介

0 文章
0 评论
23 人气
更多

推荐作者

玍銹的英雄夢

文章 0 评论 0

我不会写诗

文章 0 评论 0

十六岁半

文章 0 评论 0

浸婚纱

文章 0 评论 0

qq_kJ6XkX

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文