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?


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)


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)))))
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.