Come aggiungere company-dabbrev al popup di completamento dell'azienda?


12

Impostare:

Versione GUI GNU Emacs 25.0.50.1 (x86_64-w64-mingw32) del 25/07/2015 su KAEL

Compilato da EmacsW64.

, utilizzando l'ultima versione di da MELPA

Windows 7 x64 bit.

Situazione:

Ad esempio, sto digitando il buffer foobarsentence.

E quindi iniziare una nuova riga sotto quella, e digitando fooba, mi aspettavo di essere foobarsentencesuggerito dalla finestra di completamento del popup dell'azienda. Ma non c'è foobarsentence.

Ho trovato fuori da un'altra risposta che potrei usare azienda-dabbrev`` per questo, legato, M-/. Ma non riuscivo a capire come potevo "alimentare" i suggerimenti company-dabbrevnella finestra popup. Ho fatto una gif di screencast per chiarire la mia domanda.

inserisci qui la descrizione dell'immagine

Come puoi vedere, M-/chiama company-dabbrev. Ma vorrei vedere ciò suggerito nel popup di completamento dell'azienda. Mi ha sorpreso che questo non sia di default.

Qualche suggerimento per "alimentare" i suggerimenti dalla company-dabbrevfinestra popup dell'azienda?


Che modalità principale è questa?
PythonNut

Risposte:


24

Ecco come funziona il completamento in azienda (sto semplificando un po 'una descrizione più dettagliata può essere trovata nella documentazione di company-backends C-hvcompany-backendsRET.

Hai un elenco di backend (motori di completamento) che l'azienda dovrebbe provare a fornire il completamento al punto. La società prova ciascuno di questi backend uno dopo l'altro e il primo che restituisce qualsiasi candidato viene utilizzato per il completamento e il resto dei backend viene ignorato. Quindi, per impostazione predefinita, viene utilizzato solo un backend alla volta.

Nel tuo caso (sembri in emacs-lisp-mode) il back-end di emacs-lisp sta restituendo i candidati per il completamento e quindi company-dabbrevnon viene mai utilizzato dalla società per il completamento e non si arriva mai foobarsentenceal completamento. Quindi potresti voler cambiare i back-end aziendali in modo che vengano company-dabbrevprima company-elisp(o company-capfnegli emacsen recenti). Ma suppongo che non sia quello che vuoi dal momento che ciò rovescerebbe la situazione attuale e non otterrai i completamenti dal backend di emacs-lisp (nel qual caso continua a leggere).

La società fornisce un modo per unire i completamenti da più fonti utilizzando ciò che chiama groupedbackend. Di solito i membri di company-backendssono singoli backend, ma può anche essere un elenco di backend nel qual caso il completamento dei backend viene unito a condizione che restituiscano lo stesso prefixo il testo da completare (consultare la documentazione di company-backendsper una descrizione dettagliata).

Quindi, se vuoi unire i completamenti da company-elisp(in recente company-capfviene utilizzato emacsen ) e company-dabbrevsemplicemente farlo

(add-to-list 'company-backends '(company-capf company-dabbrev))

Inoltre, puoi unire diversi backend usando la :withparola chiave

(add-to-list 'company-backends '(company-capf :with company-dabbrev))

Questo è diverso dall'esempio di un elenco di backend senza :withpoiché la società utilizzerà solo i backend prima :withper determinare il prefix(il testo da completare). Ciò implica che i candidati dei backend successivi :withverranno ignorati dalla società, indipendentemente dal fatto che i backend restituiscano a prefixo no, se nessuno dei backend prima di :withrestituire a prefix.

Potresti voler impostare questo localmente nel buffer emacs-lisp (preferisco farlo)


@wasamasa grazie per il feedback, modificato la mia risposta per menzionarla:with
Iqbal Ansari,

Signore, meritate il mio voto. Mi è davvero piaciuta la tua spiegazione e ho imparato cose sull'azienda. Grazie per quello
ReneFroger,

Sono contento di aver potuto aiutare
Iqbal Ansari il
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.