Skip to content

Latest commit

 

History

History
180 lines (131 loc) · 9.88 KB

File metadata and controls

180 lines (131 loc) · 9.88 KB

Emacs PHP Mode

Emacs: 30.0 lang: PHP 8.4 Build Status GPL v3
NonGNU ELPA melpa badge

A powerful and flexible Emacs major mode for editing PHP scripts

English   |   日本語

GitHubプロジェクトにissueを作成してバグ報告や機能リクエストを送ってください。

Note

最新版のPHP ModeはEmacs 30をサポートしています。
アップグレードに伴うトラブルはDiscussionsに気軽に書き込んでください。

Warning

Emacsをアップグレードした直後に初めてPHPファイルを開いたときに、CC Mode関連のエラーが発生する可能性があります。これは以前のバージョンのEmacsでバイトコンパイルされたPHP Modeがディスクにキャッシュされているために起こるので、PHP Modeの再インストールによって解決します。

M-x php-mode-debug-reinstall または M-x package-reinstall php-mode コマンドをお試しください。

インストール

PHP ModeはEmacs 27.1以降で動作します。対応バージョンの詳細はSupported Versionをお読みください。Emacs 28以降では単に以下のコマンドを実行するだけでインストールできます。

M-x package-install php-mode

package-archivesにMELPAを追加することで、Web上の多くのパッケージでEmacsを強化できます。

パッケージマネージャへの依存なしでインストールしたい場合は、Lispファイルを直接配置する伝統的な方法も可能です。詳しくはManual installationをお読みください。

設定

個人設定

.emacsファイル(~/.emacs.d/init.el)にPHPモードの設定を記述できます。

(defun my-php-mode-init ()
  (subword-mode 1)
  (setq-local show-trailing-whitespace t)
  (setq-local ac-disable-faces '(font-lock-comment-face font-lock-string-face))
  (add-hook 'hack-local-variables-hook 'php-ide-turn-on nil t))

(with-eval-after-load 'php-mode
  (add-hook 'php-mode-hook #'my-php-mode-init)
  (custom-set-variables
   '(php-mode-coding-style 'psr2)
   '(php-mode-template-compatibility nil)
   '(php-imenu-generic-expression 'php-imenu-generic-expression-simple))

  ;; If you find phpcs to be bothersome, you can disable it.
  (when (require 'flycheck nil)
    (add-to-list 'flycheck-disabled-checkers 'php-phpmd)
    (add-to-list 'flycheck-disabled-checkers 'php-phpcs)))

プロジェクトローカル設定

プロジェクトのトップディレクトリに.dir-locals.elまたは.dir-locals-2.elを記述すると、プロジェクト単位の設定を追加することができます。このファイルはユーザー自身のEmacsにインストールされたパッケージに依存するため、バージョン管理の対象に含めないことを推奨します。

((nil
  (php-project-root . git)
  (php-project-coding-style . psr2)))

project.el・Projectileとの連携

php-project-get-root-dirは、まずPHP固有のマーカー(.projectilecomposer.json/composer.lock、続いてVCSディレクトリ)を探索します。モノレポではパッケージ単位のvendor/autoload.phpやコーディングスタイルがphp-modeにとって重要なため、VCSルートよりcomposer.jsonを優先します。これらのマーカーが見つからない場合はproject-currentにフォールバックするので、任意のproject.elバックエンドが検出に寄与できます。

  • Projectile 3projectile-mode有効時に自身をproject-find-functionsへ登録するため、その検出結果が自動的に利用されます。従来のphp-project-use-projectile-to-detect-rootオプションはこのため廃止予定です。

  • Projectileなしでもproject-vc-extra-root-markers(Emacs 29以降)で追加のルートマーカーを宣言できます。例えば.dir-locals.elに次のように記述します。

    ((nil
      (project-vc-extra-root-markers . ("composer.json"))))

逆に、PHP固有の検出(上記のcomposer.json優先ルール)をEglotやproject-find-fileなどのproject.el利用側に見せたい場合は、組み込みのVC検出を補完するだけになるよう、低い優先度でphp-project-project-find-functionを登録します。

(add-hook 'project-find-functions #'php-project-project-find-function 90)

HTMLとPHPが混在するファイルの編集

php-modeは純粋なPHPスクリプトのためのメジャーモードです。テンプレートのようにHTMLの中にPHPを埋め込んだファイルは、両方の言語を理解するメジャーモードで編集するほうが適しています。特にインデントは、HTML部分を素のphp-modeで編集すると正しく動作しません。

そうしたファイルのために、PHP Modeはphp-html-template-major-mode(既定はweb-mode)へ処理を委ねます。好みのモードを設定できます。

(setopt php-html-template-major-mode 'web-mode)

メジャーモードの選ばれ方

拡張子.phpのファイルはphp-mode-maybeを通して開かれ、ファイル名と内容からメジャーモードが決まります。

  • php-template-mode-alistにマッチするファイル名(例: .phtml.blade.php)は、対応するテンプレート用モードで開きます。
  • それ以外は、ディレクトリローカル変数php-project-php-file-as-templateに従います。
    • auto(既定): HTMLタグを含むファイルをphp-html-template-major-modeに切り替えます。
    • t: そのディレクトリのすべての.phpファイルをテンプレートとして扱います。
    • nil: すべての.phpファイルを素のPHPスクリプトとして扱います。
  • いずれにも当てはまらない場合はphp-default-major-mode(php-mode)で開きます。

php-project-php-file-as-template.dir-locals.elでプロジェクトごとに設定できます。

((nil
  (php-project-php-file-as-template . nil)))

php-modeからの切り替え

すでにphp-modeでHTMLタグを含むファイルをインデントしようとすると、PHP Modeは警告し、php-html-template-major-modeへの切り替えを尋ねます。このプロンプトを無効にするにはphp-mode-warn-if-html-templatenilに設定してください。

不具合を報告する

バグ報告の際には M-x php-mode-debug の出力を含めてください。この情報は問題の再現に役立ちます。

貢献するには

CONTRIBUTING.mdをご覧ください。

著作権

PHP ModeはGNU General Public License Version 3 (GPLv3) でライセンスされています。

このプロジェクトは1999年にTuradg Aleahmadが書いたphp-mode.elに起源を持ちます。2013年にDaniel HackneyがEmacs組み込みのCC Modeをもとに書き直し始めました。PHPモードの改善に協力した貢献者のリストはAuthorsContributorsに掲載されています。

このプロジェクトは2017年までEric James Michael Ritzによりメンテナンスされていました。現在はFriends of Emacs-PHP Developmentコミュニティが引き継いで開発しています。

Copyright (C) 2023  Friends of Emacs-PHP development
Copyright (C) 1999, 2000, 2001, 2003, 2004 Turadg Aleahmad
              2008 Aaron S. Hawley
              2011, 2012, 2013, 2014, 2015, 2016, 2017 Eric James Michael Ritz

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/.