¿Cómo agregar company-dabbrev a la ventana emergente de finalización de la empresa?

12

Preparar:

Versión GUI GNU Emacs 25.0.50.1 (x86_64-w64-mingw32) de 2015-07-25 en KAEL

Compilado de EmacsW64.

, utilizando la última versión de MELPA

Windows 7 x64 bit.

Situación:

Por ejemplo, estoy escribiendo en el buffer foobarsentence.

Y luego comience una nueva línea debajo de eso, y escribiendo fooba, esperaba que me foobarsentencesugirieran desde la ventana emergente de finalización de la Compañía. Pero allí no está foobarsentence.

Lo encontré hacia fuera de otra respuesta que podría utilizar sociedad-dabbrev`` para que, unidos, M-/. Pero no pude entender cómo podría 'alimentar' las sugerencias desde company-dabbrevla ventana emergente. Hice un gif de screencast para aclarar mi pregunta.

ingrese la descripción de la imagen aquí

Como puedes ver, M-/llamadas company-dabbrev. Pero me gustaría ver eso sugerido en la ventana emergente de finalización de la empresa. Me sorprendió que esto no sea por defecto.

¿Alguna sugerencia para 'alimentar' las sugerencias desde la company-dabbrevventana emergente de la empresa?

ReneFroger
fuente
¿Qué modo mayor es este?
PythonNut

Respuestas:

24

Así es como funciona la finalización en la empresa (estoy simplificando un poco una descripción más detallada se puede encontrar en la documentación de company-backends C-hvcompany-backendsRET.

Usted tiene una lista de backends (motores de finalización) que la empresa debería intentar proporcionarle en el momento. La compañía intenta cada uno de estos backend uno tras otro y el primero que devuelve cualquier candidato se usa para completar y el resto de los backends se ignoran. Entonces, de manera predeterminada, solo se usa un back-end a la vez.

En su caso (parece que está en modo emacs-lisp), el backend de emacs-lisp está devolviendo candidatos para su finalización y, por company-dabbrevlo tanto, nunca es utilizado por la empresa para la finalización y nunca se foobarsentencecompleta. Por lo tanto, es posible que desee cambiar los backends de la compañía para que eso ocurra company-dabbrevantes company-elisp(o company-capfen emacsen reciente). Pero supongo que eso no es lo que desea, ya que revertiría la situación actual y no obtendrá terminaciones del backend de emacs-lisp (en cuyo caso siga leyendo).

La compañía proporciona una forma de combinar terminaciones de múltiples fuentes usando lo que llama groupedbackends. Por lo general, los miembros company-backendsson backends individuales, pero también puede ser una lista de backends, en cuyo caso la finalización de los backends se fusiona siempre que se devuelva prefixo el texto que se completará (consulte la documentación company-backendspara obtener una descripción detallada).

Entonces, si desea fusionar las terminaciones de company-elisp(en emacsen reciente company-capfse usa) y company-dabbrevsimplemente haga esto

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

Además, puede combinar diferentes backends con la :withpalabra clave

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

Esto es diferente del ejemplo sin una lista de backends :withya que la compañía usará solo los backends antes :withpara determinar el prefix(el texto que se completará). Esto implica que los candidatos de backends posteriores :withserán ignorados por la compañía, independientemente de si los backends devuelven a prefixo no, si ninguno de los backends antes :withdevuelve a prefix.

Es posible que desee configurar esto localmente en el búfer emacs-lisp (prefiero hacerlo)

Iqbal Ansari
fuente
@wasamasa gracias por los comentarios, editó mi respuesta para mencionar:with
Iqbal Ansari
Señor, usted merece mi voto. Realmente disfruté su explicación y aprendí cosas sobre la Compañía. Gracias por eso.
ReneFroger
Me alegro de poder ayudar
Iqbal Ansari