completamento del nome file utilizzando la modalità azienda


11

Ho abilitato la compagnia usando i seguenti comandi nel mio init.el:

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

Tuttavia non sto ottenendo il completamento del nome file, anche se c'è un provider nella fonte e anche il sito web menziona che è supportato.

Comincio a digitare / home / emmanuel ... e non succede nulla, anche se mi aspetto che il completamento inizi a offrire opzioni?

Inoltre, come fa il rilevamento automatico del completamento in modalità azienda per i percorsi relativi, penso di aver letto che è supportato, ma non sono sicuro di come lo rilevi, senza il "/" iniziale come suggerimento?


1
Dovresti menzionare in quale modalità principale stai cercando di avere il completamento automatico tramite la modalità azienda. O forse stai cercando il completamento del nome del file nel minibuffer? Per favore specificare.
paprika,

1
Sono un principiante assoluto. Mi piacerebbe usarlo in tutte le principali modalità come ho capito (lisp, testo semplice, tutti i linguaggi di programmazione). E in effetti il ​​semplice completamento di una parola chiave (offrire una parola usata altrove nel buffer) sembra funzionare in lisp-editing così come in altre modalità.
Emmanuel Touzery,

nota che in seguito tenterò di ottenere un completamento più potente anche per Haskell, ma sarà solo per la modalità haskell e per ora sto ancora cercando di far funzionare quella funzione in tutte le modalità.
Emmanuel Touzery,

Risposte:


8

Devi eseguire company-filesper il completamento del file. È possibile associare una mappa diversa per il completamento del completamento dei file con

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

Assicurati anche di avere i file aziendali nei back-end aziendali ( M-x> personalizza gruppo> azienda> back-end aziendali)


Non è necessario necessariamente associare una chiave per il completamento del nome file. Penso che il punto chiave qui sia configurare company-backends. Ad esempio, potresti inserire per company-filesprimo in tale elenco o includerlo in un back-end di gruppo.
glucas,

Penso che sia necessario scrivere alcune funzioni per innescare company-fileso configurare qualcosa. Per me, almeno, non si innesca automaticamente anche se è presentecompany-backends
Jesse il

Ho il sospetto che sia perché hai altri backend davanti a te nell'elenco? La modalità Azienda utilizzerà il primo back-end che indica che è in grado di gestire il prefisso corrente. Se si inserisce company-filesall'inizio company-backendsdell'elenco, dovrebbe essere completato automaticamente. Certo, questo potrebbe non essere quello che vuoi davvero, solo sottolineando che il file backend è solo un altro backend ...
glucas

Vero, non lo sapevo. Sono un utente di VIM che esegue la migrazione a emacs e in Vim ho avuto il completamento del file attivato automaticamente in alcuni casi e il completamento del codice negli altri. Penso che sarebbe l'ideale.
Jesse,

È possibile utilizzare un hook di modalità per specificare un diverso elenco di backend in diverse modalità. Ad esempio in modalità lisp potresti voler completare il simbolo e per gli script di shell vuoi aggiungere il completamento del nome file, ecc.
glucas

15

Come già sottolineato da @Jesse, quello che vuoi qui è il company-filesbackend. Esistono diversi modi per utilizzarlo:

  1. Associare un tasto per chiamare company-filesdirettamente.

  2. Usa il comando company-begin-backend. Ciò richiede l'utilizzo del back-end, quindi offre candidati per il completamento.

  3. Utilizzare company-other-backendper ruotare l'elenco dei backend (vedere l'elemento successivo). Può essere utilizzato per attivare il completamento o può essere utilizzato dopo l'attivazione della modalità società per passare a un diverso set di candidati per il completamento. È possibile che si desideri assegnare un'associazione chiave nella mappa aziendale, ad es(define-key company-active-map (kbd "C-e") #'company-other-backend)

  4. Configura la variabile company-backends. La modalità Azienda attraversa questo elenco per trovare un backend che accetta il prefisso corrente (ovvero il testo prima del punto). È del tutto possibile avere un backend nell'elenco che accetta il prefisso corrente ma non offre candidati per il completamento, a quel punto la modalità azienda non completerà automaticamente nulla. È possibile personalizzare l'elenco per ordinare i backend in modo tale da soddisfare le proprie esigenze.

Alcuni esempi di modifica company-backends:

Se hai sempre desiderato completare i nomi dei file, potresti fare in modo che il tuo unico backend:

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

Sembra improbabile, quindi è meglio mettere prima il backend più comunemente usato e quindi utilizzare una delle opzioni menzionate in precedenza per cambiare backend o invocarne uno per nome quando è necessario qualcos'altro.

È inoltre possibile configurare un back-end di 'gruppo' che crea un insieme unito di candidati per il completamento. Prova questo, ad esempio:

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

Questo specifica un singolo backend che unisce i candidati di altri tre backend. Ti darà risultati da completamento a punto, dabbrev e dal file system.

È possibile utilizzare gli hook di modalità per specificare un diverso set di backend per diverse modalità principali. Per esempio:

(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)))))
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.