15

我目前在 emacs 中用于 PHP 开发的设置有很多缺点。我经常使用html和php的混合模式。我希望该模式能够识别我所处的上下文并适当地格式化。我对适当的标签特别感兴趣。这对我来说是最重要的功能。正确的颜色会很好,但如果它偶尔会弄乱也没关系。

我目前在 MacOS X 上使用 Emacs 24.3multi-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 开发环境的任何提示。

4

1 回答 1

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-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 块重构为纯文件中的函数)。代码将更容易阅读/遵循。

于 2013-07-25T13:30:33.320 回答