Comment obtenir l'achèvement du code dans emacs?


20

Je sais qu'emacs prend en charge la complétion de code. Mais pour être honnête, je n'ai jamais été un bon lecteur de FAQ, au moins pour quelque chose que je suis complètement nouveau. Je me demande donc ce que je dois télécharger et comment faire en sorte qu'emacs puisse faire un peu de code intelligent pour moi en C ++ et Java. Ou existe-t-il un package qui effectue l'achèvement du code pour de nombreuses langues principales?

Réponses:


27

La méthode de base qui fonctionnera sur n'importe quel type de tampon dans emacs est l'abréviation dynamique utilisée par la frappe M-/(aka alt+ /)

Cela étendra le texte pour dupliquer d'autres chaînes déjà existantes dans votre tampon actuel ou dans d'autres tampons actuellement ouverts.

Pour une complétion de code plus étendue spécifique au langage pour C ++ ou Java (ou autres), vous voudrez regarder un package de modèles ou d'extraits de code. Il y en a discuté dans cette question connexe sur StackOverflow. L'un qui est couramment mentionné dans ces discussions est yasnippet - il y a une démo de screencast dans cet article sur un blog emacs .


+1. Vous pouvez également complete.elessayer la bibliothèque standard . Il est très ancien et peu connu, mais le type d'achèvement dans le tampon qu'il fournit peut être utile. M-x find-library complete, puis lisez le commentaire dans le dossier.
attiré

21

La réponse de @ Doug est un peu dépassée et il se concentre sur l'expansion du code en utilisant des extraits de code prédéfinis.

Je pense que la question de l'OP concerne l'intellisense (nom de méthode de remplissage automatique d'une classe, par exemple).

  1. hippie expand était populaire, l'analyseur de syntaxe est des balises emacs . Il prend donc en charge toutes les langues prises en charge par ctags (y compris C ++ , Java). Mais le résultat n'est pas parfait car ctags n'utilise que l'expression régulière pour analyser le code. Voir mon init-hippie-expand.el pour plus de détails. Vous pouvez commencer par vérifier la valeur dehippie-expand-try-functions-list

  2. l'auto-complétion est moderne avec une interface utilisateur sophistiquée (menu déroulant, même dans la fenêtre de la console). Si vous utilisez clang comme backend. L'intellisense est bien meilleur. Pour faire fonctionner le clang, vous devez installer auto-complete-clang qui est le plugin de l'auto-complétion. Il ne prend en charge que les langages pris en charge (C / C ++ / Obj-C). Comme l'a souligné Sylvain Benner , vous pouvez utiliser emacs-eclim comme back-end d'analyse Java qui appelle en fait l'exécutable d'eclipse. La saisie semi-automatique peut donc prendre en charge java. Voir mon init-auto-complete.el pour plus de détails.

  3. sémantique fournit à la fois l'interface utilisateur et le moteur d'analyse arrière. C'est lent. L'interface utilisateur déroulante est OK mais nécessite une fenêtre X. Le résultat intellisense est meilleur que ctags. Et la documenation est trop geek pour moi. Voir init-semantic.el pour plus de détails.

  4. le mode entreprise est similaire à la saisie semi-automatique, la différence est qu'il regroupe tout en un seul paquet. Par exemple, les développeurs C ++ ont uniquement besoin d'installer le mode entreprise (la saisie automatique nécessite un plugin tiers). Une autre différence d'interface est que la société affichera automatiquement le candidat . Vous appuyez donc moins sur les touches en compagnie. Il est possible de faire la même chose en auto-complétion après personnalisation.

En résumé, la saisie semi-automatique, les entreprises sont les deux choix les plus populaires. Sémantique et hippie-expand sont également les bienvenus mais moins utilisés. D'autres sont trop insignifiants pour être mentionnés et leurs caractéristiques sont déjà couvertes par les quatre grands. Par exemple, la saisie semi-automatique peut utiliser yasnippet comme source d'entrée (la saisie semi-automatique fournit l'interface utilisateur, mais les candidats réels sont produits par le back-end yasnippet).

Je suggère d'utiliser l'auto-complétion ou la société comme plugin majeur de complétion de code et soit sémantique soit hippie-expand comme plugin complémentaire .

J'utilise le mode entreprise et hippie-expand parce que,

  • Maintenant (année 2017), le mode entreprise est plus activement maintenu que l'auto-complétion et a plus de plugins tiers (par exemple, plugin latex)

  • hippie-expand n'est pas très actif mais n'occupe pas la TABclé que le mode entreprise / sémantique / auto-complétion utilise

Si vous utilisez le mode entreprise pour C ++ / Java, vous souhaiterez peut-être modifier company-backends.

Quelques conseils supplémentaires sur le mode entreprise,

Vous devrez peut-être modifier la valeur de company-backends. Par exemple, supposons que sa valeur soit (company-eclim company-semantic company-clang (company-dabbrev-code company-gtags company-etags company-keywords)). Ensuite, si company-eclimpeut obtenir des candidats non nuls, companypense que vous écrivez java, donc il ne fonctionnera PAS après company-eclim.

Voyons maintenant (company-dabbrev-code company-gtags company-etags company-keywords). Tous ces quatre backends seront utilisés ensemble. Par exemple, même après company-dabbrev-codeavoir récupéré avec succès des candidats non nuls, les trois autres backends sont toujours exécutés.

Dans le monde réel, il est souvent nécessaire de réajuster l'ordre des backends ou d'ajouter un nouveau backend ( company-rtagspar exemple).


quel est le meilleur package de complétion automatique dans Emacs 24 pour le latex?
doctorat

@doctorate Je pense que vous devez utiliser la saisie semi -automatique et sa source emacswiki.org/emacs/AutoCompleteSources , mais je suis un programmeur plutôt qu'un utilisateur de latex, vous feriez donc mieux de vérifier auprès de la communauté Google plus Emacs, il y a beaucoup d'universitaires là-bas .
chen bin

veuillez noter que le mode entreprise prend également en charge le latex. Je suggère donc la société au lieu de la saisie semi-automatique
chen bin

2

Réponse courte: je n'en connais aucun pour emacs qui soit utile pour java. Le développement dynamique ne se soucie pas des bibliothèques de votre chemin de classe, il ne sait rien du code que vous saisissez, il ne peut être étendu qu'au texte qui existe déjà dans l'un des tampons. JDE et emacs-eclim essaient de fournir cette fonctionnalité mais personnellement je n'ai pas été impressionné.


0

Réponse courte: M-/

Réponse longue: RTFM :-)


6
+1, dieu j'espère que la prochaine question que je vois est "besoin d'aide pour utiliser la commande RTFM"
rownage

@rownage: oh, c'est `` info-emacs-manual '' ( C-h r)
SamB

1
Et alors C-h k M-/?
Doug Harris
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.