除了 09 年 5 月 28 日给出的答案,我想我可以添加一些包来增强我在 Emacs 上的 PHP 体验。
自动完成
ac-php 在我看来是对 Etags 的一个很好的补充。所有对标签的引用都可以用 etags 找到,但定义用 ac-php。 ac-php 也可配置为应包含哪些目录。例如,在开发 wordpress 插件时,您可以在 .ac-php-conf.json(位于项目根目录)中添加对包含 wordpress 文件的目录的引用,它会自动完成、跳转到引用等。此包支持 @ 987654330@和auto-complete。
下面是 ac-php 的配置示例:
(use-package ac-php
:ensure t
:bind (:map
php-mode-map
("M-+" . ac-php-find-symbol-at-point)
("M-]" . ac-php-location-stack-back)
("<menu> r" . ac-php-remake-tags)
("<menu> R" . ac-php-remake-tags-all)))
另一个选择是使用phpactor,但 Emacs 接口在撰写本文时仍处于 alpha 阶段,我也几乎没有任何经验 - 除了构造函数完成,它工作得很好。
错误检查
除了语法错误,Flycheck 还支持开箱即用的phpMessDetector 和phpCodeSniffer。这使您能够根据支持的编码标准和最佳实践获得更多增强的通知/警告/错误报告。
另一个我喜欢用于静态分析的包是PHPStan Emacs interface,它会报告代码中的潜在错误(包括不正确的类型提示)。
其他格式
我也使用phpcbf(显然已存档)。此包将缓冲区格式化为所需的编码标准。
语义
对于不了解的人来说,Semantic 是一个内置的 Emacs 包,并提供类似 IDE 的功能。这是一个如何为 php-mode 包含语义的示例:
(add-hook 'php-mode-hook (lambda ()
(require 'semantic/symref/grep)
(add-to-list 'semantic-symref-filepattern-alist '(php-mode "*.php" "*.inc"))
(semantic-mode)))
菜单
对于包含imenu跳转到定义,另一个示例配置:
这是用于跳转到in-file方法和函数的侧边栏。
(use-package imenu-list
:ensure t
:config
(setq imenu-list-focus-after-activation t)
:bind (:map php-map
("<menu> \\" . imenu-list-smart-toggle)))
Helm 支持跳转到定义的示例配置在所有项目文件中:
(use-package imenu-anywhere
:ensure t
:after helm
:bind (:map php-map
("<menu> |" . helm-imenu-anywhere)))
附加调试
除了 geben,我喜欢使用 psysh,它通过放入 eval(\Psy\sh()); 会在该行代码上给出一个 repl 并允许访问所有定义以及任何其他人可以访问的内容(当然,在需要它之后作曲家)。
更通用的方便包
片段
对于已经使用过 Emacs 的每个人来说可能有点明显,但yasnippet 对于编写自己的模板也非常方便。还有一些包包含许多针对各种语言的预定义模板,但我自己编写是为了让 Emacs 比我的设置不那么臃肿,这也有助于我更容易记住它们。
项目管理
再次原谅显而易见,但 Projectile 也是一个非常好的包,默认情况下包含 git 支持来确定项目范围。
离线文档
如果您使用 Zeal 进行离线文档浏览,还有zeal-at-point。示例配置,如果您使用,可以说:PHP、CodeIgniter 和 WordPress:
(use-package zeal-at-point
:ensure t
:bind (("<menu> z" . zeal-at-point))
:config
(add-to-list 'zeal-at-point-mode-alist '(php-mode . ("codeigniter" "wordpress" "php"))))