Las mejores listas de backends de la compañía

9

Sé que este no es el mejor tipo de pregunta para la pila ... pero no puedo pensar en otro lugar donde pueda tener suficiente exposición.

Así que realmente me gusta el modo de empresa, pero a veces es molesto tener que cambiar manualmente al siguiente backend (el intento de la empresa es útil aquí). Comencé a jugar con backends agrupados, y puedo ver un potencial increíble. Desafortunadamente, no estoy contento con nada de lo que he probado hasta ahora. Creo que esto podría establecerse mejor con ganchos para diferentes modos. ¿Alguien tiene algunas listas interesantes de backends de la compañía de las que pueda inspirarme?

Utilizo principalmente python (elpy), javascript (modo js3), web (modo web) y scripts de shell si eso ayuda.

aiguofer
fuente

Respuestas:

14

Puede establecer un valor predeterminado company-backends, luego use el gancho para agregar diferentes backends a diferentes modos. Aquí hay una forma en que configuro en mis 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))
          ))))
  • para el modo web, también puede usar el paquete `company-web '.
  • o script de shell, hay otros paquetes compatibles con la finalización, puede buscarlo.
Stardiviner
fuente
¡Genial gracias! Esto ayudó mucho. Lo ajusté un poco ya que me gusta usar elpy-company-backendy me gusta company-yasnippetsfusionarme con otros backends de finalización de código. Lo único que no puedo entender es cómo obtener css-modey tern-modeapagar cuando no está en sus respectivas etiquetas.
aiguofer
1
Además, la pregunta que presentó también fue bastante útil.
aiguofer
Bien, puedes encontrar eso. grad te puede ayudar.
stardiviner