我目前在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开发环境设置。
答案 0 :(得分:13)
我将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$")
顺便说一下,尝试将PHP文件和模板分开,并使混合的HTML / PHP文件尽可能简单(将长PHP块重构为纯文件中的函数)。代码将更易于阅读/遵循。