Как настроить emacs для правильной разработки PHP?

Моя текущая настройка в emacs для разработки PHP имеет ряд недостатков. Я часто использую смешанный режим html и php. Я хочу, чтобы режим мог распознавать, в каком контексте я вхожу и формат. Меня особенно интересует соответствующая табуляция. Это самая важная функция для меня. Правильная раскраска была бы приятной, но если это время от времени заходит, что хорошо.

В настоящее время я использую multi-web-mode и по умолчанию php-mode в Emacs 24.3 на MacOS X.

Одной из наиболее неприятных проблем является включение синтаксиса 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, но это не дало мне результатов, которые я хотел. В некотором смысле это было хуже. Я бы очень признателен за любые советы, которые есть у людей для получения рабочей среды разработки php для emacs.

Ответ 1

Я использую 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$")

BTW, попробуйте отделить ваши PHP файлы и шаблоны и сохранить смешанный файл HTML/PHP максимально простым (рефакторинг длинных блоков PHP в функции в чистом файле). Код будет легче читать/следовать.