Como adicionar company-dabbrev ao pop-up de conclusão da empresa?

12

Configuração:

Versão da GUI GNU Emacs 25.0.50.1 (x86_64-w64-mingw32) de 25/07/2015 no KAEL

Compilado a partir do EmacsW64.

, usando a versão mais recente do MELPA

Windows 7 x 64 bits.

Situação:

Por exemplo, estou digitando a foobarsentence do buffer.

E, em seguida, inicie uma nova linha abaixo disso e, digitando fooba, esperava receber foobarsentencesugestões da janela de conclusão de pop-up da empresa. Mas não existe foobarsentence.

Eu descobri com outra resposta que eu poderia usar company-dabbrev`` para isso, obrigado M-/,. Mas não consegui descobrir como poderia "alimentar" as sugestões company-dabbrevna janela pop-up. Fiz um gif de screencast para deixar minha pergunta clara.

insira a descrição da imagem aqui

Como você pode ver, M-/liga company-dabbrev. Mas eu gostaria de ver isso sugerido no pop-up de conclusão da empresa. Surpreendeu-me que não é por padrão.

Alguma sugestão para 'alimentar' as sugestões da company-dabbrevjanela pop-up da empresa?

ReneFroger
fonte
Que modo principal é esse?
PythonNut 01/09/2015

Respostas:

24

Aqui está como a conclusão da empresa funciona (estou simplificando um pouco, uma descrição mais detalhada pode ser encontrada na documentação de company-backends C-hvcompany-backendsRET.

Você tem uma lista de back-ends (mecanismos de conclusão) que a empresa deve tentar concluir no momento. A empresa tenta cada um desses back-end, um após o outro, e o primeiro que retorna qualquer candidato é usado para conclusão e o restante dos back-end é ignorado. Portanto, por padrão, apenas um back-end é usado por vez.

No seu caso (você parece no modo emacs-lisp), o back-end do emacs-lisp está retornando candidatos para conclusão e, portanto, company-dabbrevnunca é usado pela empresa para conclusão e você nunca é foobarsentenceconcluído. Portanto, convém alterar os back-end da empresa para que isso ocorra company-dabbrevantes company-elisp(ou company-capfno emacsen recente). Mas acho que não é o que você deseja, pois isso reverteria a situação atual e você não obterá conclusões do back-end do emacs-lisp (nesse caso, continue lendo).

A empresa fornece uma maneira de mesclar conclusões de várias fontes usando o que chama de groupedback - end. Geralmente, os membros de company-backendssão back-end individuais, mas também pode ser uma lista de back-end; nesse caso, a conclusão dos back-ends é mesclada, desde que retornem o mesmo prefixou o texto a ser concluído (consulte a documentação company-backendspara obter uma descrição detalhada).

Portanto, se você deseja mesclar conclusões de company-elisp(no emacsen recente company-capfé usado) e company-dabbrevsimplesmente faça isso

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

Além disso, você pode mesclar diferentes back-ends usando a :withpalavra - chave

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

Isso é diferente do exemplo sem uma lista de back-end, :withjá que a empresa usará apenas os back-end antes :withpara determinar o prefix(o texto a ser concluído). Isso implica que os candidatos dos backends posteriores :withserão ignorados pela empresa, independentemente de os backends retornarem a prefixou não, se nenhum dos backends anteriores :withretornar a prefix.

Você pode definir isso localmente no buffer emacs-lisp (eu prefiro fazê-lo)

Iqbal Ansari
fonte
@wasamasa thanks for the feedback, editado minha resposta a menção:with
Iqbal Ansari
Senhor, você merece meu voto. Gostei muito da sua explicação e aprendi coisas sobre a empresa. Obrigado por isso.
ReneFroger 3/09/15
Ainda bem que pude ajudar
Iqbal Ansari