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

Ave*_*ery 15 php emacs

我目前用于PHP开发的emacs设置有各种缺点.我经常使用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
Run Code Online (Sandbox Code Playgroud)

我已经尝试过使用mumao/nxhtml但是没有给我我想要的结果.在某些方面,情况更糟.我非常感谢人们为emacs获得有用的php开发环境设置的任何提示.

tun*_*ngd 14

我使用web-mode(http://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-mode,mumamo或者multi-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$")
Run Code Online (Sandbox Code Playgroud)

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