uzupełnianie nazw plików przy użyciu trybu firmowego

11

Włączyłem firmę, używając następujących poleceń w moim pliku init.el:

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

Jednak nie otrzymuję uzupełnienia nazwy pliku, chociaż w źródle jest jakiś dostawca, a strona internetowa wspomina, że ​​jest obsługiwany.

Zaczynam pisać / home / emmanuel ... i nic się nie dzieje, chociaż spodziewałbym się, że zakończenie zacznie oferować opcje?

Ponadto, w jaki sposób automatyczne wykrywanie zakończenia w trybie firmowym dla ścieżek względnych wydaje mi się, że jest obsługiwane, ale nie jestem pewien, jak to wykryłoby, bez początkowego „/” jako wskazówki?

Emmanuel Touzery
źródło
1
Powinieneś wspomnieć, w którym trybie głównym próbujesz uzyskać automatyczne uzupełnianie w trybie firmowym. A może szukasz uzupełnienia nazwy pliku w minibuforze? Proszę sprecyzuj.
papryka
1
Jestem totalnym początkującym. Chciałbym używać go we wszystkich głównych trybach, jakie rozumiem (seplenienie, zwykły tekst, wszelkie języki programowania). I rzeczywiście, proste uzupełnianie słów kluczowych (oferowanie słowa używanego gdzie indziej w buforze) wydaje się działać w edycji lisp, a także w innych trybach.
Emmanuel Touzery
zauważ, że później postaram się również uzyskać bardziej zaawansowane uzupełnienie dla Haskell, ale będzie to tylko dla trybu haskell i na razie wciąż staram się, aby ta funkcja działała we wszystkich trybach.
Emmanuel Touzery

Odpowiedzi:

8

Musisz uruchomić w company-filescelu uzupełnienia pliku. Możesz powiązać inną mapę do ukończenia plików za pomocą

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

Upewnij się także, że masz pliki firmowe w firmowych backendach ( M-x> customize-group> company> firmowe backendy)

Jesse
źródło
Nie trzeba wiązać klucza do uzupełnienia nazwy pliku. Myślę, że kluczową kwestią jest tutaj konfiguracja company-backends. Na przykład możesz umieścić company-filespierwszy na tej liście lub dołączyć go do zaplecza grupy.
glucas
Myślę, że trzeba napisać jakąś funkcję wyzwalającą company-fileslub coś skonfigurować. Dla mnie przynajmniej nie jest uruchamiane automatycznie, nawet jeśli jest w company-backends
środku
Podejrzewam, że to dlatego, że masz na liście inne backendy? Tryb firmowy użyje pierwszego zaplecza, który wskazuje, że może obsłużyć bieżący prefiks. Jeśli wstawisz company-filesna początku company-backendslisty, powinna się ona automatycznie uzupełniać. Oczywiście może to nie być to, czego naprawdę chcesz, po prostu wskazując, że backend plików jest tylko innym
backendem
To prawda, nie wiedziałem o tym. Jestem migrującym użytkownikiem vima na emacsa, aw vimie w niektórych przypadkach automatycznie wyzwalałem uzupełnianie plików, a w innych - uzupełnianie kodu. Myślę, że to byłby idealny.
Jesse,
Za pomocą haka trybu można określić inną listę backendów w różnych trybach. Na przykład w trybie seplenia możesz chcieć uzupełnienia symbolu, a dla skryptów powłoki chcesz uzupełnić nazwę pliku itp.
glucas,
15

Jak już wskazał @Jesse, tutaj potrzebujesz company-filesbackendu. Istnieje kilka różnych sposobów korzystania z niego:

  1. Powiąż klucz, aby zadzwonić company-filesbezpośrednio.

  2. Użyj polecenia company-begin-backend. To monituje o użycie backendu, a następnie oferuje kandydatów do ukończenia.

  3. Służy company-other-backenddo obracania listy backendów (patrz następny element). Może to być użyte do uruchomienia zakończenia lub może być użyte po uruchomieniu trybu firmowego w celu przełączenia na inny zestaw kandydatów do ukończenia. Możesz przypisać powiązanie klucza na mapie firmy, np(define-key company-active-map (kbd "C-e") #'company-other-backend)

  4. Skonfiguruj zmienną company-backends. Tryb firmowy przegląda tę listę, aby znaleźć zaplecze, które akceptuje bieżący prefiks (tj. Tekst przed punktem). Całkowicie możliwe jest posiadanie backendu na liście, który akceptuje bieżący prefiks, ale nie oferuje żadnych kandydatów do ukończenia, w którym to momencie tryb firmowy niczego nie uzupełnia automatycznie. Możesz dostosować listę, aby porządkować backendy w sposób, który odpowiada Twoim potrzebom.

Kilka przykładów modyfikacji company-backends:

Jeśli kiedykolwiek chciałeś tylko uzupełnić nazwy plików, możesz zrobić z tego swój jedyny backend:

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

Wydaje się to mało prawdopodobne, więc lepiej jest najpierw umieścić najczęściej używany backend, a następnie użyć jednej z wymienionych wcześniej opcji, aby przełączyć backend lub wywołać jedną z nazwy, gdy potrzebujesz czegoś innego.

Możesz także skonfigurować backend „grupowy”, który tworzy scalony zestaw kandydatów do ukończenia. Spróbuj tego, na przykład:

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

Określa pojedynczy backend, który scala kandydatów z trzech innych backendów. Daje to wyniki z punktu końcowego, dabbrev i systemu plików.

Za pomocą haków trybu można określić inny zestaw zaplecza dla różnych głównych trybów. Na przykład:

(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)))))
glucas
źródło