Comment ajouter company-dabbrev à la fenêtre contextuelle Achèvement de l'entreprise?

12

Installer:

Version GUI GNU Emacs 25.0.50.1 (x86_64-w64-mingw32) du 2015-07-25 sur KAEL

Compilé à partir d'EmacsW64.

, en utilisant la dernière version de MELPA

Windows 7 x64 bits.

Situation:

Par exemple, je tape dans le tampon foobarsentence.

Et puis commencez une nouvelle ligne en dessous, et en tapant fooba, je m'attendais à être foobarsentencesuggéré dans la fenêtre de complétion de la société. Mais il n'y en a pas foobarsentence.

Je l' ai trouvé à partir d'une autre réponse que je pourrais utiliser pour cela, l' entreprise dabbrev`` liée, M-/. Mais je ne pouvais pas comprendre comment je pouvais «alimenter» les suggestions company-dabbrevdans la fenêtre contextuelle. J'ai fait un gif screencast pour clarifier ma question.

entrez la description de l'image ici

Comme vous pouvez le voir, les M-/appels company-dabbrev. Mais j'aimerais voir cela suggéré dans la fenêtre contextuelle d'achèvement de l'entreprise. Cela m'a surpris ce n'est pas par défaut.

Une suggestion afin de «nourrir» les suggestions de la company-dabbrevfenêtre contextuelle de l'entreprise?

ReneFroger
la source
De quel mode principal s'agit-il?
PythonNut du

Réponses:

25

Voici comment fonctionne l'achèvement en entreprise (je simplifie un peu une description plus détaillée peut être trouvée dans la documentation de company-backends C-hvcompany-backendsRET.

Vous avez une liste de backends (moteurs de complétion) que la société doit essayer de fournir au moment voulu. La société essaie chacun de ces backends l'un après l'autre et le premier qui retourne les candidats est utilisé pour l'achèvement et les autres backends sont ignorés. Donc, par défaut, un seul backend est utilisé à la fois.

Dans votre cas (vous semblez en mode emacs-lisp), le backend emacs-lisp renvoie les candidats à l'achèvement et company-dabbrevn'est donc jamais utilisé par l'entreprise pour l'achèvement et vous n'obtenez jamais l' foobarsentenceachèvement. Donc, vous voudrez peut-être changer les backends de l' entreprise afin que cela company-dabbrevprécède company-elisp(ou company-capfdans les emacsen récents). Mais je suppose que ce n'est pas ce que vous voulez, car cela inverserait la situation actuelle et vous n'obtiendrez pas les compléments du backend emacs-lisp (auquel cas lisez la suite).

La société fournit un moyen de fusionner les complétions à partir de plusieurs sources en utilisant ce qu'elle appelle des groupedbackends. Habituellement, les membres de company-backendssont des backends individuels, mais il peut également s'agir d'une liste de backends auquel cas l'achèvement des backends est fusionné à condition qu'ils retournent le même prefixou le texte à compléter (veuillez consulter la documentation de company-backendspour une description détaillée).

Donc, si vous voulez fusionner les finitions de company-elisp(sur Emacsen récent company-capfest utilisé) et company-dabbrevfaites simplement cela

(add-to-list 'company-backends '(company-capf company-dabbrev))

De plus, vous pouvez fusionner différents backends à l'aide du :withmot clé

(add-to-list 'company-backends '(company-capf :with company-dabbrev))

Ceci est différent de l'exemple sans liste de backends :withcar la société n'utilisera que les backends avant :withpour déterminer le prefix(le texte à compléter). Cela implique que les candidats des backends après :withseront ignorés par la société, que les backends retournent prefixou non, si aucun des backends avant :withretour a prefix.

Vous voudrez peut-être définir cela localement dans le tampon emacs-lisp (je préfère le faire)

Iqbal Ansari
la source
@wasamasa merci pour les commentaires, édité ma réponse à mentionner:with
Iqbal Ansari
Monsieur, vous méritez mon vote. J'ai vraiment apprécié votre explication et appris des choses sur la société. Merci pour ça.
ReneFroger
Heureux d'avoir pu aider
Iqbal Ansari