Meilleures listes de backends d'entreprises

9

Je sais que ce n'est pas le meilleur type de question pour la pile ... mais je ne peux pas penser à un autre endroit où il pourrait être suffisamment exposé.

Donc j'aime vraiment le mode entreprise, mais parfois c'est ennuyeux de devoir passer manuellement au backend suivant (entreprise-essayer-dur est pratique ici). J'ai commencé à jouer avec des backends groupés, et je peux voir un énorme potentiel. Malheureusement, je ne suis pas satisfait de tout ce que j'ai essayé jusqu'à présent. Je pense que cela pourrait être mieux réglé avec des crochets pour différents modes. Quelqu'un a-t-il des listes de backends d'entreprises intéressantes dont je pourrais m'inspirer?

J'utilise principalement des scripts python (elpy), javascript (mode js3), web (mode web) et shell si cela aide.

aiguofer
la source

Réponses:

14

Vous pouvez définir une valeur par défaut company-backends, puis utiliser le hook pour ajouter différents backends à différents modes. Voici une façon de configurer mes emacs.

;; set default `company-backends'
(setq company-backends
      '((company-files          ; files & directory
         company-keywords       ; keywords
         company-capf
         company-yasnippet
         )
        (company-abbrev company-dabbrev)
        ))

(add-hook 'python-mode-hook
          (lambda ()
            (add-to-list (make-local-variable 'company-backends)
                         'company-anaconda)))
(dolist (hook '(js-mode-hook
                js2-mode-hook
                js3-mode-hook
                inferior-js-mode-hook
                ))
  (add-hook hook
            (lambda ()
              (tern-mode t)

              (add-to-list (make-local-variable 'company-backends)
                           'company-tern)
              )))

;;;_. company-mode support like auto-complete in web-mode

;; Enable CSS completion between <style>...</style>
(defadvice company-css (before web-mode-set-up-ac-sources activate)
  "Set CSS completion based on current language before running `company-css'."
  (if (equal major-mode 'web-mode)
      (let ((web-mode-cur-language (web-mode-language-at-pos)))
        (if (string= web-mode-cur-language "css")
            (unless css-mode (css-mode))))))

;; Enable JavaScript completion between <script>...</script> etc.
(defadvice company-tern (before web-mode-set-up-ac-sources activate)
  "Set `tern-mode' based on current language before running `company-tern'."
  (if (equal major-mode 'web-mode)
      (let ((web-mode-cur-language (web-mode-language-at-pos)))
        (if (or (string= web-mode-cur-language "javascript")
               (string= web-mode-cur-language "jsx"))
            (unless tern-mode (tern-mode))
          ;; (if tern-mode (tern-mode))
          ))))
  • pour le mode web, vous pouvez également utiliser le package «company-web».
  • ou script shell, d'autres packages prennent en charge la complétion, vous pouvez le rechercher.
stardiviner
la source
Super merci! cela a beaucoup aidé. Je l'ai légèrement modifié car j'aime utiliser elpy-company-backendet j'aime company-yasnippetsfusionné avec d'autres backends de complétion de code. La seule chose que je ne peux pas comprendre, c'est comment l'obtenir css-modeet l' tern-modeéteindre lorsqu'ils ne sont pas dans leurs balises respectives.
aiguofer
1
De plus, la question que vous avez déposée était également très utile.
aiguofer
Bon, vous pouvez trouver ça. grad il peut vous aider.
stardiviner