Beste Firmen-Backend-Listen

8

Ich weiß, dass dies nicht die beste Art von Frage für Stapel ist ... aber ich kann mir keinen anderen Ort vorstellen, an dem es genug Belichtung geben könnte.

Ich mag den Firmenmodus sehr, aber manchmal ist es ärgerlich, manuell zum nächsten Backend wechseln zu müssen (Firmenversuch ist hier praktisch). Ich habe angefangen, mit gruppierten Backends herumzuspielen, und ich sehe ein unglaubliches Potenzial. Leider bin ich mit nichts zufrieden, was ich bisher versucht habe. Ich denke, dies könnte besser mit Hooks für verschiedene Modi eingestellt werden. Hat jemand interessante Firmen-Backend-Listen, von denen ich mich inspirieren lassen könnte?

Ich benutze hauptsächlich Python (Elpy), Javascript (JS3-Modus), Web (Web-Modus) und Shell-Skripte, wenn das hilft.

aiguofer
quelle

Antworten:

13

Sie können einen Standard festlegen company-backendsund dann mit hook verschiedene Backends an verschiedene Modi anhängen. Hier ist eine Möglichkeit, wie ich in meinen Emacs konfiguriere.

;; 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))
          ))))
  • Für den Web-Modus können Sie auch das Paket "Company-Web" verwenden.
  • oder Shell-Skript, es gibt andere Pakete, die den Abschluss unterstützen, Sie können danach suchen.
Stardiviner
quelle
Super danke! das hat sehr geholfen. Ich habe es ein wenig optimiert, da ich es gerne benutze elpy-company-backendund es gerne company-yasnippetsmit anderen Backends zur Code-Vervollständigung zusammenführe. Das einzige, was ich nicht herausfinden kann, ist, wie man es bekommt css-modeund tern-modeausschaltet, wenn es nicht in den jeweiligen Tags ist.
Aiguofer
1
Auch die von Ihnen eingereichte Frage war sehr hilfreich.
Aiguofer
Gut, dass du das finden kannst. grad kann es dir helfen.
Stardiviner