如何配置emacs以进行正确的PHP开发?

时间:2013-07-25 02:00:28

标签: php emacs

我目前在emacs for PHP开发中的设置有各种缺点。我经常使用html和php的混合模式。我希望模式能够识别我所处的上下文并进行适当的格式化。我对适当的标签特别感兴趣。这对我来说是最重要的功能。正确的着色会很好,但是如果它偶尔混乱就可以了。

我目前在MacOS X上的Emacs 24.3中使用multi-web-mode和默认php-mode

最令人沮丧的问题之一是合并heredoc语法:echo <<<我当前的系统无法识别此语法需要不是标签。我通常会收到这样的警告:

Indentation fails badly with mixed HTML/PHP in the HTML part in
plaín `php-mode'.  To get indentation to work you must use an
Emacs library that supports 'multiple major modes' in a buffer.
Parts of the buffer will then be in `php-mode' and parts in for
example `html-mode'.  Known such libraries are:
    mumamo, mmm-mode, multi-mode
You have these available in your `load-path':
    mumamo

我已经尝试过使用mumao / nxhtml,但这并没有给我我想要的结果。在某些方面,情况更糟。我非常感谢人们为emacs设置有效的php开发环境设置。

1 个答案:

答案 0 :(得分:13)

我将web-modehttp://web-mode.org/)用于混合的HTML / PHP文件,使用php-mode用于纯PHP文件。最新版本的php-mode还建议web-mode用于混合HTML / PHP文件:https://github.com/ejmr/php-mode#avoid-html-template-compatibility

mmm-modemumamomulti-web-mode等试图将不同行为应用于缓冲区的不同部分的其他模式不同,web-mode知道所有可用的语法/可以与HTML混合的模板。您还可以将web-mode用于混合HTML文件/模板,例如Twig,Django,ERB ......实际上,我使用web-mode来处理涉及HTML的任何内容。

虽然有一个PHP模板的问题:其他模板系统有不同的文件扩展名,因此很容易自动切换模式,但PHP模板通常使用相同的.php扩展名;所以我必须按文件夹切换,或者有时手动调用 M-x web-mode 。这是我目前的配置:

(defun add-auto-mode (mode &rest patterns)
  (mapc (lambda (pattern)
          (add-to-list 'auto-mode-alist (cons pattern mode)))
        patterns))

(add-auto-mode 'web-mode
               "*html*" "*twig*" "*tmpl*" "\\.erb" "\\.rhtml$" "\\.ejs$" "\\.hbs$"
               "\\.ctp$" "\\.tpl$" "/\\(views\\|html\\|templates\\)/.*\\.php$")

顺便说一下,尝试将PHP文件和模板分开,并使混合的HTML / PHP文件尽可能简单(将长PHP块重构为纯文件中的函数)。代码将更易于阅读/遵循。