usar tutorial salir como emacs autocomplete code-completion icicles

salir - emacs tutorial



Dar sentido a las opciones de modo de finalizaciĆ³n de Emacs (4)

Por lo general, uso dos paquetes de finalización (aparte de la terminación TAB incorporada en los búferes minibuffer y comint).

pabbrev.el : proporciona una sugerencia en el cursor (presione TAB ) para aceptar. Las elecciones se hacen mirando la frecuencia de las palabras. Me gusta esto debido a la indicación visual de lo que se completaría, pero en su mayoría funciona solo para una terminación.

hippie-expand - que generalmente está vinculado a M- / en lugar de dabbrev porque hace todo lo que hace dabbrev y más. Esto funciona bien cuando es posible que necesite alternar entre algunas alternativas, o si desea completar un nombre de archivo o alguna otra cosa.

Me gustan los dos porque no requieren ningún movimiento del mouse y trabajan rápidamente.

Parece que hay muchos mecanismos alternativos de finalización automática de Emacs. Sin una búsqueda exhaustiva, lo siguiente viene a la mente: ido, autocompletar, carámbanos, completar el búfer, completar el minibúfer y completar el estándar de forma inmediata. Y luego está el código completado. Montones. Y mucho de eso depende del lenguaje. Sería muy útil tener un gurú de Emacs, o tres, resumir los beneficios de los jugadores principales tanto en el código como en el autocompletado sin código. Y al tratarse de Stack Overflow, no hace falta decir que sería bueno identificar los modos de finalización automática que funcionan mejor para los mecanismos tipo IDE de Emacs.

Actualización : acabo de descubrir la página de finalización de Emacs Wiki que amplifica mi pregunta básica: de todas estas opciones, qué es bueno, qué es menos bueno y si solo pudieras jugar con 2-3, ¿cuál recomendarías?


Puede consultar el paquete de modo de empresa o autocompletar, que podría usar diferentes fuentes de finalización, incluido CEDET, y también permiten definir nuevas fuentes de finalización ... Para algunos lenguajes de programación, puede utilizar CEDET directamente ...


Icicles Wrt -

En su mayor parte, carámbanos es sobre la finalización de minibúfer . Hay algunos casos en los que ofrece algo para completar en el búfer (por ejemplo, código), pero se trata principalmente de la finalización de minibúfer.

Cuando la mayoría de las personas piensan en la finalización de minibúfer, piensan en la finalización del nombre del archivo, la finalización del nombre del búfer y la finalización del nombre del comando. Pero hay mucho más que eso.

Como programador de Emacs-Lisp, puede usar la finalización donde quiera que desee ofrecer a los usuarios una opción interactiva. ¡Eso es bastante general!

Completar es realmente acerca de la coincidencia de patrones para definir conjuntos , que luego puede manipular.

La mayoría de la gente piensa que el único objetivo de la finalización de minibúfer es elegir un solo nombre (archivo, búfer, comando, variable, ...). Pero el poder de completar realmente es filtrar y posiblemente ordenar el conjunto completo de nombres de archivos, nombres de búferes, etc. de diferentes maneras, y luego permitir que los usuarios hagan algo con el conjunto resultante (no necesariamente un solo objeto).

De eso se trata Icicles : lo que le permite definir conjuntos de forma dinámica (incremental) mediante la coincidencia de patrones , y luego actuar sobre los miembros seleccionados o todos los miembros de esos conjuntos.

Este no es tanto el objetivo de Ido u otros paquetes de finalización, con la posible excepción de Helm (Cualquier cosa) .

A diferencia de Helm (Cualquier cosa) , que privilegia los nombres de objetos sobre los tipos de objetos y las acciones como punto de partida, en Icicles normalmente invoca un comando para hacer algo a uno o más objetos de un tipo dado (por ejemplo, búferes), y luego restringe el conjunto de esos objetos, típicamente por coincidencia de nombre. A menudo es el caso de Icicles que puede actuar sobre esos objetos de múltiples maneras pero relacionadas dentro del mismo comando.

En Helm (Cualquier cosa) , en general, su entrada se compara primero con el nombre del objeto contra todo el universo de objetos de todos los tipos, y luego se reduce para seleccionar algunas operaciones para realizar.

Finalmente, tenga en cuenta que cada uno de los diversos enfoques de finalización ofrece algo (por ejemplo, comandos) para los usuarios finales y algo (por ejemplo, funciones de finalización) para los programadores.

Si está completando el código , generalmente solo desea completar el nombre en el punto . Lo más importante sobre la finalización del código es determinar cuáles son los candidatos apropiados. Para eso, el contexto textual (por ejemplo, el código) es típicamente de suma importancia. Para ofrecer opciones inteligentes, la función de finalización debe analizar el contexto (código), incluido cualquier contexto que abarque (por ejemplo, el código del proyecto).

La terminación de minibúfer, por otro lado, puede usarse para cualquier tipo de elección y acción, incluida la opción múltiple con múltiples acciones. Aquí, todas las partes son interesantes: qué candidatos ofrecer, qué puede hacer con ellos, etc.

No sé si eso ayuda, pero esa es mi opinión de todos modos.


Uso la finalización de tabulación estándar en el minibúfer para nombres de archivos, comandos Mx y otras cosas.

También utilizo con frecuencia la tecla M-/ pulsación de tecla ( dabbrev-expand ) para completar dinámicamente cualquier palabra en cualquiera de sus buffers de Emacs. Es fantástico, especialmente para nombres de variables largos. Aquí está la documentación:

M-/ runs the command dabbrev-expand, which is an interactive autoloaded Lisp function in `dabbrev.el''. It is bound to M-/. (dabbrev-expand ARG) Expand previous word "dynamically". Expands to the most recent, preceding word for which this is a prefix. If no suitable preceding word is found, words following point are considered. If still no suitable word is found, then look in the buffers accepted by the function pointed out by variable `dabbrev-friend-buffer-function''. A positive prefix argument, N, says to take the Nth backward *distinct* possibility. A negative argument says search forward. If the cursor has not moved from the end of the previous expansion and no argument is given, replace the previously-made expansion with the next possible expansion not yet tried. The variable `dabbrev-backward-only'' may be used to limit the direction of search to backward if set non-nil. See also `dabbrev-abbrev-char-regexp'' and C-M-/.