finalización de nombre de archivo usando el modo empresa


11

Habilité la compañía usando los siguientes comandos en mi init.el:

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

Sin embargo, no obtengo la finalización del nombre de archivo, aunque hay algún proveedor en la fuente y también el sitio web menciona que es compatible.

Comienzo a escribir / home / emmanuel ... y no pasa nada, ¿aunque esperaría que la finalización comience a ofrecer opciones?

Además, ¿cómo detecta automáticamente la finalización de modo de empresa para rutas relativas, creo que leí que es compatible, pero no estoy seguro de cómo lo detectaría, sin la "/" inicial como sugerencia?


1
Debe mencionar en qué modo principal está tratando de completar automáticamente a través del modo empresa. ¿O tal vez está buscando completar el nombre de archivo en el minibúfer? Por favor especifica.
pimentón

1
Soy un principiante total. Me gustaría usarlo en todos los modos principales tal como lo entiendo (lisp, texto sin formato, cualquier lenguaje de programación). Y, de hecho, la simple finalización de palabras clave (ofrecer una palabra utilizada en otro lugar en el búfer) parece funcionar en la edición de lisp, así como en otros modos.
Emmanuel Touzery

tenga en cuenta que más adelante intentaré obtener una terminación más poderosa para Haskell también, pero eso será solo para el modo haskell y por ahora todavía estoy tratando de que esa característica funcione en todos los modos.
Emmanuel Touzery

Respuestas:


8

Tienes que correr company-filespara completar el archivo. Puede vincular un mapa diferente para completar la finalización de archivos con

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

También asegúrese de tener los archivos de la compañía en los backends de la compañía ( M-x> personalizar-grupo> compañía> backends de la compañía)


No necesariamente necesita vincular una clave para completar el nombre de archivo. Creo que el punto clave aquí es configurar company-backends. Por ejemplo, podría poner company-filesprimero en esa lista, o incluirlo en un backend grupal.
glucas

Creo que es necesario escribir alguna función para activar company-files, o configurar algo. Para mí, al menos, no se activa automáticamente incluso si está encompany-backends
Jesse

Sospecho que es porque tienes otros backends en la lista. El modo de empresa utilizará el primer backend que indica que puede manejar el prefijo actual. Si inserta company-filesal principio de la company-backendslista, debe completarse automáticamente. Por supuesto, esto puede no ser lo que realmente quieres, solo señalar que el backend de los archivos es solo otro backend ...
glucas

Es cierto que no lo sabía. Soy un usuario de vim que está migrando a emacs, y en vim tuve la finalización del archivo activada automáticamente en ciertos casos, y la finalización del código en los demás. Creo que ese sería el ideal.
Jesse

Puede usar un enlace de modo para especificar una lista diferente de backends en diferentes modos. Por ejemplo, en el modo lisp, es posible que desee completar el símbolo y para los scripts de shell desea agregar la finalización del nombre de archivo, etc.
glucas

15

Como @Jesse ya señaló, lo que quieres aquí es el company-filesbackend. Hay varias formas diferentes de usarlo:

  1. Ate una tecla para llamar company-filesdirectamente.

  2. Usa el comando company-begin-backend. Esto le solicita que utilice el backend y luego le ofrece candidatos para completar.

  3. Use company-other-backendpara rotar a través de la lista de backends (vea el siguiente elemento). Esto se puede usar para activar la finalización o se puede usar después de que se haya activado el modo de empresa para cambiar a un conjunto diferente de candidatos de finalización. Es posible que desee asignar un enlace de clave en el mapa de la empresa, por ejemplo(define-key company-active-map (kbd "C-e") #'company-other-backend)

  4. Configura la variable company-backends. El modo de empresa recorre esta lista para encontrar un servidor que acepte el prefijo actual (es decir, el texto anterior al punto). Es completamente posible tener un back-end en la lista que acepte el prefijo actual pero no ofrezca candidatos de finalización, momento en el cual el modo de empresa no completará automáticamente nada. Puede personalizar la lista para ordenar los backends de una manera que satisfaga sus necesidades.

Algunos ejemplos de modificación company-backends:

Si solo quisiera completar nombres de archivo, podría hacer que su único backend:

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

Parece poco probable, por lo que es mejor que coloque primero su backend más comúnmente usado y luego use una de las opciones mencionadas anteriormente para cambiar backends o invocar una por nombre cuando necesite otra cosa.

También puede configurar un backend de 'grupo' que crea un conjunto combinado de candidatos de finalización. Prueba esto, por ejemplo:

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

Esto especifica un único backend que combina los candidatos de otros tres backends. Le dará resultados de finalización en el punto, dabbrev y el sistema de archivos.

Puede usar los ganchos de modo para especificar un conjunto diferente de backends para diferentes modos principales. Por ejemplo:

(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)))))
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.