Dateinamenvervollständigung im Firmenmodus


11

Ich habe die Firma mit den folgenden Befehlen in meiner init.el aktiviert:

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

Ich erhalte jedoch keine Dateinamenvervollständigung, obwohl es einen Anbieter in der Quelle gibt und auch die Website erwähnt, dass er unterstützt wird.

Ich fange an zu tippen / home / emmanuel ... und nichts passiert, obwohl ich erwarten würde, dass der Abschluss Optionen anbietet?

Wie wird die automatische Erkennung im Unternehmensmodus für relative Pfade abgeschlossen? Ich glaube, ich habe gelesen, dass sie unterstützt wird, bin mir aber nicht sicher, wie sie erkannt werden würde, ohne das anfängliche "/" als Tipp.


1
Sie sollten angeben, in welchem ​​Hauptmodus Sie versuchen, die automatische Vervollständigung über den Unternehmensmodus zu erreichen. Oder suchen Sie nach einer Vervollständigung des Dateinamens im Minibuffer? Bitte angeben.
Paprika

1
Ich bin ein totaler Anfänger. Ich möchte es in allen wichtigen Modi verwenden, so wie ich es verstehe (Lisp, Klartext, alle Programmiersprachen). Tatsächlich scheint die einfache Vervollständigung von Schlüsselwörtern (bieten Sie ein Wort an, das an einer anderen Stelle im Puffer verwendet wird) sowohl in der Lisp-Bearbeitung als auch in anderen Modi zu funktionieren.
Emmanuel Touzery

Beachten Sie, dass ich später versuchen werde, auch für Haskell eine leistungsfähigere Vervollständigung zu erzielen, dies jedoch nur für den Haskell-Modus. Derzeit versuche ich immer noch, diese Funktion in allen Modi zum Laufen zu bringen.
Emmanuel Touzery

Antworten:


8

Sie müssen company-filesfür die Dateivervollständigung ausgeführt werden. Sie können eine andere Zuordnung für die Fertigstellung der Dateien mit binden

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

Stellen Sie außerdem sicher, dass Sie die Unternehmensdateien in Unternehmens-Backends haben ( M-x> Gruppe anpassen> Firma> Unternehmens-Backends).


Sie müssen nicht unbedingt einen Schlüssel binden, um den Dateinamen zu vervollständigen. Ich denke, der entscheidende Punkt hier ist die Konfiguration company-backends. Sie können company-filesdiese Liste beispielsweise an die erste Stelle setzen oder in ein Gruppen-Backend aufnehmen.
Glucas

Ich denke, es ist notwendig, eine Funktion zu schreiben, um sie auszulösen company-filesoder etwas zu konfigurieren. Zumindest für mich wird es nicht automatisch ausgelöst, selbst wenn es in istcompany-backends
Jesse

Ich vermute, das liegt daran, dass Sie andere Backends in der Liste vor sich haben? Im Unternehmensmodus wird das erste Backend verwendet, das angibt, dass das aktuelle Präfix verarbeitet werden kann. Wenn Sie company-filesam Anfang der company-backendsListe einfügen , sollte diese automatisch vervollständigt werden. Natürlich kann dies nicht das sein, was Sie tatsächlich wollen, nur darauf hinweisen, dass das Datei-Backend nur ein weiteres Backend ist ...
Glucas

Das wusste ich natürlich nicht. Ich bin ein migrierender vim-Benutzer zu emacs, und in vim wurde die Dateivervollständigung in bestimmten Fällen automatisch und die Codevervollständigung in den anderen Fällen automatisch ausgelöst. Ich denke das wäre das Ideal.
Jesse

Sie können einen Modus-Hook verwenden, um eine andere Liste von Backends in verschiedenen Modi anzugeben. Zum Beispiel möchten Sie im Lisp-Modus möglicherweise die Vervollständigung von Symbolen und für Shell-Skripte die Vervollständigung von Dateinamen usw. hinzufügen
Glucas

15

Wie @Jesse bereits betont hat, möchten Sie hier das company-filesBackend. Es gibt verschiedene Möglichkeiten, es zu verwenden:

  1. Binden Sie einen Schlüssel, um company-filesdirekt anzurufen .

  2. Befehl verwenden company-begin-backend. Dies fordert Sie zur Verwendung des Backends auf und bietet dann Abschlusskandidaten an.

  3. Verwenden Sie company-other-backenddiese Option, um durch die Liste der Backends zu blättern (siehe nächster Punkt). Dies kann verwendet werden, um den Abschluss auszulösen, oder es kann verwendet werden, nachdem der Unternehmensmodus ausgelöst wurde, um zu einem anderen Satz von Abschlusskandidaten zu wechseln. Möglicherweise möchten Sie eine Schlüsselbindung in der Firmenkarte zuweisen, z(define-key company-active-map (kbd "C-e") #'company-other-backend)

  4. Konfigurieren Sie die Variable company-backends. Der Firmenmodus durchläuft diese Liste, um ein Backend zu finden, das das aktuelle Präfix akzeptiert (dh den Text vor dem Punkt). Es ist durchaus möglich, ein Backend in der Liste zu haben, das das aktuelle Präfix akzeptiert, aber keine Abschlusskandidaten anbietet. Zu diesem Zeitpunkt wird im Unternehmensmodus nichts automatisch vervollständigt. Sie können die Liste anpassen, um die Backends so zu ordnen, dass sie Ihren Anforderungen entsprechen.

Einige Beispiele für Änderungen company-backends:

Wenn Sie nur Dateinamen vervollständigen wollten, können Sie dies zu Ihrem einzigen Backend machen:

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

Das scheint unwahrscheinlich, daher ist es besser, wenn Sie zuerst Ihr am häufigsten verwendetes Backend verwenden und dann eine der zuvor genannten Optionen verwenden, um das Backend zu wechseln oder eines mit Namen aufzurufen, wenn Sie etwas anderes benötigen.

Sie können auch ein 'Gruppen'-Backend konfigurieren, das einen zusammengeführten Satz von Abschlusskandidaten erstellt. Versuchen Sie dies zum Beispiel:

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

Dies gibt ein einzelnes Backend an, das die Kandidaten aus drei anderen Backends zusammenführt. Sie erhalten Ergebnisse von der Fertigstellung am Punkt, dabbrev und dem Dateisystem.

Sie können Modus-Hooks verwenden, um einen anderen Satz von Backends für verschiedene Hauptmodi anzugeben. Zum Beispiel:

(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)))))
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.