39 votes

Quelle est la bonne configuration pour éditer PHP dans Emacs ?

Je vais devoir éditer un peu de PHP pour mon travail cet été, et je cherche une configuration Emacs efficace pour l'éditer. J'ai déjà beaucoup investi dans Emacs, donc passer à un autre éditeur ne vaut pas la peine.

En ce moment, j'ai nXhtml-mode qui fournit un mode PHP avec coloration syntaxique (il en existe au moins trois différents dans la nature) ainsi que MuMaMo pour éditer le PHP intégré dans le HTML. Je viens de commencer à utiliser Compléments automatiques y Tout ce qui est pour la programmation et les trucs généraux d'Emacs, respectivement.

Ce que je cherche vraiment, c'est un moyen efficace pour qu'Emacs comprenne vraiment le projet, au-delà de la simple mise en évidence. Etags semble être une bonne option, mais il semble que le processus de génération de nouvelles balises soit un peu ardu et manuel (ou du moins pas invisible). Ce qui est bien avec les Etags, c'est qu'ils s'intègrent bien avec Anything et Auto-Complete. D'autres options potentielles sont gtags (bien que j'hésite à installer des fichiers non-elisp, juste pour la complexité), vtags ou Sémantique J'ai déjà eu l'occasion de m'en servir et cela semble compliqué à mettre en place. De plus, il ne semble pas qu'il supporte PHP.

Une autre option est Imenu Je voudrais pouvoir accéder aux définitions de fonctions dans d'autres fichiers (de préférence en utilisant Anything pour compléter le nom).

Les projets sur lesquels je vais travailler ne sont pas très importants (environ 30 000 lignes au total), donc les frais généraux d'Etags ne seront probablement pas un gros problème, mais je préfère ne pas l'utiliser s'il existe une meilleure solution.

Quel est donc votre système d'édition PHP préféré ?

23voto

Török Gábor Points 13913

En plus des fonctionnalités que vous connaissez déjà, je vous suggère les suivantes.

ETags

Je n'utilise pas les ETags, mais il y a déjà une question sur SO Comment créer/mettre à jour de manière programmée un fichier TAGS avec emacs ? . Aucune bonne réponse n'a été postée, mais cela peut être un bon point de départ pour se faire une idée.

Débogage

Flymake est un mode permettant d'obtenir une vérification syntaxique à la volée. Il est également compatible avec PHP. Il signale les erreurs de syntaxe immédiatement pendant que vous tapez. La version de Flymake livrée avec Emacs 23 contient le support PHP. Si vous avez une version antérieure, consultez le post de Sacha Chua sur Emacs et PHP : Vérification syntaxique à la volée avec Flymake .

Un autre paquet utile est Geben qui vous permet de déboguer vos scripts de manière interactive. Pour PHP, vous pouvez utiliser XDebug. Il existe un tutoriel détaillé sur la façon de le faire, voir Déboguer php dans emacs avec geben .

Recherche de documentation

Le mode PHP possède une fonctionnalité intéressante qui permet de consulter la définition de la fonction dans le manuel de PHP dans votre navigateur web ( M-x php-search-documentation o C-c C-f ). Vous pouvez le combiner avec Emacs-W3M pour obtenir la page de manuel correspondante sans quitter Emacs.

0 votes

+1 pour la fonction de documentation php-search dont je n'avais aucune idée.

0 votes

Le lien vers le débogage avec Emacs/geben est cassé.

1 votes

5voto

fxbois Points 336

Web-model.el (disponible sur web-mode.org ) gère assez bien les blocs php intégrés dans un document html. Ce mode majeur mettra également en évidence les parties js et css.

3voto

nurikabe Points 779

Comme alternative à ETags, considérez GNU Global, alias "GTags". Global est beaucoup plus intelligent pour trouver les tables de tags, et est assez rapide à mettre à jour. Emacs-fu a un bon article sur faire cela à la volée .

Par ailleurs, si vous utilisez le portage Windows de GNU Global avec une version Windows d'Emacs, utilisez la version DJGPP ("DOS"). La version MinGW ("Win32") semble avoir un problème avec les noms de chemin.

1voto

Jeffrey Points 13

En plus de la réponse donnée le 28 mai 2009, je pense pouvoir y ajouter quelques paquets qui ont amélioré mon expérience de PHP sur Emacs.

Autocomplétion

ac-php est à mon avis un bon complément à Etags. Toutes les références à un tag seront trouvées avec etags, mais la définition avec ac-php. ac-php est également configurable pour savoir quels répertoires doivent être inclus. Par exemple, lors du développement d'un plugin wordpress, vous pouvez ajouter une référence au répertoire contenant les fichiers wordpress en .ac-php-conf.json (qui réside dans la racine du projet) et il s'auto-complètera, sautera à la référence, etc. Ce paquet supporte company-mode y auto-complete .

Voici un exemple de configuration de ac-php :

(use-package ac-php
  :ensure t
  :bind (:map
         php-mode-map
         ("M-+" . ac-php-find-symbol-at-point)
         ("M-]" . ac-php-location-stack-back)
         ("<menu> r" . ac-php-remake-tags)
         ("<menu> R" . ac-php-remake-tags-all)))

Une autre option serait d'utiliser phpactor Mais l'interface d'Emacs est, à l'heure où j'écris ces lignes, encore en phase alpha, et je n'ai guère d'expérience dans ce domaine, à l'exception de la complétion des constructeurs, qui fonctionne plutôt bien.

Vérification des erreurs

En plus des erreurs de syntaxe, Flycheck supporte phpMessDetector y phpCodeSniffer en dehors de la boîte. Cela vous permet d'avoir des rapports de notification, d'avertissement et d'erreur améliorés, basés sur les normes de codage et les meilleures pratiques prises en charge.

Un autre paquet que j'aime pour l'analyse statique est Interface Emacs de PHPStan qui signale les erreurs potentielles dans votre code (y compris les indications de type incorrectes).

Mise en forme supplémentaire

J'utilise également phpcbf (qui apparemment est archivé). Ce paquet formate le tampon dans le standard de codage souhaité.

Sémantique

Pour ceux qui ne le savent pas, Semantic est un paquetage intégré à Emacs et offre des fonctionnalités similaires à celles d'un IDE. Voici un exemple d'inclusion de semantic pour php-mode :

(add-hook 'php-mode-hook (lambda ()
                           (require 'semantic/symref/grep)
                           (add-to-list 'semantic-symref-filepattern-alist '(php-mode "*.php" "*.inc"))
                           (semantic-mode)))

Imenu

Pour inclure l'imenu sautant aux définitions, un autre exemple de configuration :

C'est la barre latérale qui permet de passer à dans le fichier les méthodes et les fonctions.

(use-package imenu-list
  :ensure t
  :config
  (setq imenu-list-focus-after-activation t)
  :bind (:map php-map
         ("<menu> \\" . imenu-list-smart-toggle)))

Exemple de configuration pour le support de la barre dans le passage aux définitions dans tous les fichiers du projet :

(use-package imenu-anywhere
  :ensure t
  :after helm
  :bind (:map php-map
         ("<menu> |" . helm-imenu-anywhere)))

Débogage supplémentaire

Outre geben, j'aime utiliser psysh qui, en ajoutant eval(\Psy\sh()); donne un repl sur cette ligne de code et donne accès à toutes les définitions et tout ce à quoi on aurait accès (bien sûr, après l'avoir demandé dans le compositeur).

Plus généralement, des paquets pratiques

Snippets

Peut-être un peu évident pour tous ceux qui ont déjà de l'expérience avec Emacs, mais yasnippet est également très pratique pour écrire vos propres modèles. Il existe également des paquets qui incluent de nombreux modèles prédéfinis pour toutes sortes de langues, mais j'écris les miens pour qu'Emacs soit un peu moins lourd que ma configuration actuelle, ce qui m'aide aussi à m'en souvenir plus facilement.

Gestion de projet

Pardonnez encore une fois l'évidence, mais Projectile est aussi un très bon paquet qui inclut par défaut le support git pour délimiter le projet.

Documentation hors ligne

Si vous utilisez Zeal pour parcourir la documentation hors ligne, il existe aussi zeal-at-point . Exemple de configuration, si vous utilisez, disons : PHP, CodeIgniter et WordPress :

(use-package zeal-at-point
  :ensure t
  :bind (("<menu> z" . zeal-at-point))
  :config
  (add-to-list 'zeal-at-point-mode-alist '(php-mode . ("codeigniter" "wordpress" "php"))))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X