complétion du nom de fichier en utilisant le mode entreprise


11

J'ai activé la société en utilisant les commandes suivantes dans mon init.el:

(require 'company)
(add-hook 'after-init-hook 'global-company-mode)

Cependant, je n'obtiens pas l'achèvement du nom de fichier, bien qu'il y ait un fournisseur dans la source et que le site Web mentionne qu'il est pris en charge.

Je commence à taper / home / emmanuel ... et rien ne se passe, même si je m'attends à ce que l'achèvement commence à proposer des options?

De plus, comment la détection automatique en mode entreprise est-elle effectuée pour les chemins relatifs, je pense que je lis que c'est pris en charge, mais je ne sais pas comment cela le détecterait, sans le "/" initial comme astuce?


1
Vous devez mentionner dans quel mode majeur vous essayez d'avoir l'auto-complétion via le mode entreprise. Ou peut-être recherchez-vous l'achèvement du nom de fichier dans le mini-tampon? Veuillez préciser.
paprika

1
Je suis un débutant total. Je voudrais l'utiliser dans tous les modes principaux tels que je les comprends (lisp, texte brut, tous les langages de programmation). Et en effet, la simple complétion des mots clés (proposer un mot utilisé ailleurs dans la mémoire tampon) semble fonctionner aussi bien en mode d'édition lisp que dans d'autres modes.
Emmanuel Touzery

notez que j'essaierai plus tard d'obtenir une complétion plus puissante pour Haskell également, mais ce ne sera que pour le mode haskell et pour l'instant j'essaie toujours de faire fonctionner cette fonctionnalité dans tous les modes.
Emmanuel Touzery

Réponses:


8

Vous devez exécuter company-filespour terminer le fichier. Vous pouvez lier une carte différente pour l'achèvement des fichiers avec

(define-key global-map (kbd "C-.") 'company-files)

Assurez-vous également que les fichiers de la société se trouvent dans les backends de la société ( M-x> personnaliser-groupe> société> backends de la société)


Vous n'avez pas nécessairement besoin de lier une clé pour compléter le nom de fichier. Je pense que le point clé ici est de configurer company-backends. Par exemple, vous pouvez placer le company-filespremier dans cette liste ou l'inclure dans un backend de groupe.
glucas

Je pense qu'il est nécessaire d'écrire une fonction pour déclencher company-filesou de configurer quelque chose. Pour moi, au moins, il ne se déclenche pas automatiquement, même s'il est encompany-backends
Jesse

Je suppose que c'est parce que vous avez d'autres backends devant lui dans la liste? Le mode société utilisera le premier backend qui indique qu'il peut gérer le préfixe actuel. Si vous insérez company-filesau début de la company-backendsliste, elle devrait se compléter automatiquement. Bien sûr, ce n'est peut-être pas ce que vous voulez réellement, soulignant simplement que le backend des fichiers n'est qu'un autre backend ...
glucas

C'est vrai, je ne le savais pas. Je suis un utilisateur migrant de vim vers emacs, et dans vim j'ai eu l'achèvement du fichier déclenché automatiquement dans certains cas, et l'achèvement du code dans les autres. Je pense que ce serait l'idéal.
Jesse

Vous pouvez utiliser un hook de mode pour spécifier une liste différente de backends dans différents modes. Par exemple, en mode lisp, vous pouvez souhaiter l'achèvement du symbole et pour les scripts shell, vous voulez ajouter l'achèvement du nom de fichier, etc.
glucas

15

Comme @Jesse l'a déjà souligné, ce que vous voulez ici, c'est le company-filesbackend. Il existe plusieurs façons de l'utiliser:

  1. Liez une touche pour appeler company-filesdirectement.

  2. Utilisez la commande company-begin-backend. Cela vous invite à utiliser le backend, puis propose des candidats à l'achèvement.

  3. Utilisez company-other-backendpour faire défiler la liste des backends (voir l'élément suivant). Cela peut être utilisé pour déclencher l'achèvement ou il peut être utilisé après le déclenchement du mode entreprise pour basculer vers un autre ensemble de candidats à l'achèvement. Vous souhaiterez peut-être affecter une liaison de touches dans la carte d'entreprise, par exemple(define-key company-active-map (kbd "C-e") #'company-other-backend)

  4. Configurez la variable company-backends. Le mode entreprise parcourt cette liste afin de trouver un backend qui accepte le préfixe actuel (c'est-à-dire le texte avant le point). Il est tout à fait possible d'avoir un backend dans la liste qui accepte le préfixe actuel mais n'offre aucun candidat d'achèvement, auquel cas le mode entreprise ne complétera rien automatiquement. Vous pouvez personnaliser la liste pour commander les backends d'une manière qui répond à vos besoins.

Quelques exemples de modifications company-backends:

Si vous ne souhaitiez que compléter des noms de fichiers, vous pouvez en faire votre seul backend:

(setq company-backends '(company-files))

Cela semble peu probable, il est donc préférable de mettre d'abord votre backend le plus couramment utilisé, puis d'utiliser l'une des options mentionnées précédemment pour changer de backend ou en invoquer une par nom lorsque vous avez besoin d'autre chose.

Vous pouvez également configurer un backend «groupe» qui crée un ensemble fusionné de candidats à l'achèvement. Essayez ceci, par exemple:

(setq company-backends '((company-capf company-dabbrev-code company-files)))

Cela spécifie un seul backend qui fusionne les candidats de trois autres backends. Il vous donnera les résultats de l'achèvement au point, de dabbrev et du système de fichiers.

Vous pouvez utiliser des hooks de mode pour spécifier un ensemble différent de backends pour différents modes principaux. Par exemple:

(add-hook 'org-mode-hook
          (lambda ()
            (setq-local company-backends '((company-files company-dabbrev)))))

(add-hook 'emacs-lisp-mode-hook
          (lambda ()
            (setq-local company-backends '((company-capf company-dabbrev-code)))))
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.