conclusão do nome do arquivo usando o modo da empresa

11

Ativei a empresa usando os seguintes comandos no meu init.el:

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

No entanto, não estou obtendo a conclusão do nome do arquivo, embora haja algum provedor na fonte e também o site mencione o suporte.

Começo a digitar / home / emmanuel ... e nada acontece, embora eu esperasse que a conclusão começasse a oferecer opções?

Além disso, como o modo empresa detecta automaticamente a conclusão de caminhos relativos, acho que li que é suportado, mas não tenho certeza de como o detectaria, sem o "/" inicial como uma dica?

Emmanuel Touzery
fonte
11
Você deve mencionar em qual modo principal você está tentando obter o preenchimento automático por meio da empresa. Ou talvez você esteja procurando pela conclusão do nome do arquivo no minibuffer? Por favor especifique.
paprika
11
Eu sou um iniciante total. Eu gostaria de usá-lo em todos os principais modos como eu o entendo (lisp, texto sem formatação, qualquer linguagem de programação). E, de fato, o simples preenchimento de palavras-chave (oferecer uma palavra usada em outro lugar no buffer) parece funcionar na edição de idiomas assim como em outros modos.
Emmanuel Touzery
note que mais tarde tentarei obter uma conclusão mais poderosa para o Haskell também, mas isso será apenas para o modo haskell e, por enquanto, ainda estou tentando fazer com que esse recurso funcione em todos os modos.
Emmanuel Touzery

Respostas:

8

Você precisa executar company-filespara concluir o arquivo. Você pode vincular um mapa diferente para a conclusão da conclusão de arquivos com

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

Verifique também se você possui os arquivos da empresa em back-end da empresa ( M-x> customize-group> company> company back-end)

Jesse
fonte
Você não precisa necessariamente vincular uma chave para a conclusão do nome do arquivo. Eu acho que o ponto principal aqui é configurar company-backends. Por exemplo, você pode colocar company-filesprimeiro nessa lista ou incluí-la em um back-end de grupo.
glucas
Eu acho que é necessário escrever alguma função para acionar company-filesou configurar alguma coisa. Para mim, pelo menos, não é acionado automaticamente mesmo que seja emcompany-backends
Jesse
Eu suspeito que é porque você tem outros backends à frente na lista? O modo de empresa usará o primeiro back-end que indica que ele pode lidar com o prefixo atual. Se você inserir company-filesno início da company-backendslista, ele deverá ser preenchido automaticamente. Claro, isso pode não ser o que você realmente quer, apenas apontando que o backend arquivos é apenas mais um backend ...
glucas
É verdade que eu não sabia disso. Sou um usuário do vim migrando para o emacs e, no vim, a conclusão do arquivo foi acionada automaticamente em certos casos e a conclusão do código nos outros. Eu acho que seria o ideal.
Jesse
Você pode usar um gancho de modo para especificar uma lista diferente de back-end em modos diferentes. Por exemplo, no modo de lisp você pode querer símbolo conclusão e para shell scripts que você deseja adicionar a conclusão filename, etc.
glucas
15

Como o @Jesse já apontou, o que você quer aqui é o company-filesback - end. Existem várias maneiras diferentes de usá-lo:

  1. Ligue uma tecla para ligar company-filesdiretamente.

  2. Use comando company-begin-backend. Isso solicita que o back-end use e oferece candidatos à conclusão.

  3. Use company-other-backendpara percorrer a lista de back-end (consulte o próximo item). Isso pode ser usado para acionar a conclusão ou depois que o modo da empresa foi acionado para alternar para um conjunto diferente de candidatos à conclusão. Você pode atribuir uma ligação de chave no mapa da empresa, por exemplo(define-key company-active-map (kbd "C-e") #'company-other-backend)

  4. Configurar a variável company-backends. O modo Empresa percorre esta lista para encontrar um back-end que aceite o prefixo atual (ou seja, o texto antes do ponto). É perfeitamente possível ter um back-end na lista que aceite o prefixo atual, mas não ofereça nenhum candidato de conclusão, quando o modo da empresa não concluirá nada automaticamente. Você pode personalizar a lista para solicitar os back-end de uma maneira que atenda às suas necessidades.

Alguns exemplos de modificação company-backends:

Se você sempre quis completar nomes de arquivos, poderia fazer desse seu único back-end:

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

Isso parece improvável, então é melhor colocar primeiro o back-end mais comumente usado e depois usar uma das opções mencionadas anteriormente para alternar os back-end ou invocar um pelo nome quando precisar de algo mais.

Você também pode configurar um back-end de 'grupo' que cria um conjunto mesclado de candidatos à conclusão. Tente isso, por exemplo:

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

Isso especifica um único back-end que mescla os candidatos de outros três back-end. Ele fornecerá resultados da conclusão no ponto, dabbrev e o sistema de arquivos.

Você pode usar ganchos de modo para especificar um conjunto diferente de back-end para diferentes modos principais. Por exemplo:

(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
fonte