¿Cómo obtener la finalización del código en emacs?

20

Sé que emacs admite la finalización de código. Pero para ser sincero, nunca he sido un buen lector de preguntas frecuentes, al menos para algo en lo que soy completamente nuevo. Entonces, me pregunto qué necesito descargar y cómo hacer para que emacs pueda completar un código inteligente por mí en C ++ y Java. ¿O hay algún paquete que complete el código para muchos de los principales idiomas?

Starcorn
fuente

Respuestas:

27

La forma básica que funcionará en cualquier tipo de búfer en emacs es la abreviatura dinámica utilizada al presionar M-/(también conocido como alt+ /)

Eso expandirá el texto para duplicar otras cadenas ya existentes en su búfer actual o en otros búferes actualmente abiertos.

Para completar un código más extenso que sea específico del lenguaje para C ++ o Java (u otros), querrá ver un paquete de plantillas o fragmentos de código. Hay algunos discutidos en esta pregunta relacionada en StackOverflow. Uno de los que se menciona comúnmente en estas discusiones es yasnippet : hay una demostración de screencast en esta publicación en un blog de emacs .

Doug Harris
fuente
+1. También es posible que desee complete.elprobar la biblioteca estándar . Es muy antiguo y poco conocido, pero el tipo de finalización en el búfer que proporciona puede ser útil. M-x find-library complete, luego lea el Comentario en el archivo.
Dibujó el
21

La respuesta de @ Doug está un poco desactualizada y su enfoque está en la expansión del código mediante el uso de fragmentos predefinidos.

Creo que la pregunta del OP es sobre intellisense (nombre del método de autocompletar de una clase, por ejemplo).

  1. hippie expand solía ser popular, el analizador de sintaxis es etiquetas emacs . Por lo tanto, es compatible con todos los lenguajes ctags (incluidos C ++, Java). Pero el resultado no es perfecto porque ctags solo usa expresiones regulares para analizar el código. Vea mi init-hippie-expand.el para más detalles. Puede comenzar comprobando el valor dehippie-expand-try-functions-list

  2. auto-complete es moderno con una interfaz de usuario elegante (menú desplegable, incluso en la ventana de la consola). Si usas clang como backend. El intellisense es mucho mejor. Para que el clang funcione, necesita instalar auto-complete-clang, que es el complemento de auto-complete. Solo es compatible con el lenguaje clang (C / C ++ / Obj-C). Como Sylvain Benner señaló, puede usar emacs-eclim como el back-end de análisis de Java que en realidad llama al ejecutable de eclipse. Por lo tanto, el autocompletado puede admitir Java. Vea mi init-auto-complete.el para más detalles.

  3. semántico proporciona tanto la interfaz de usuario como el motor de análisis de back-end. Es lento. La IU desplegable está bien pero requiere una ventana X. El resultado intellisense es mejor que ctags. Y la documentación es demasiado geek para mí. Ver init-semantic.el para más detalles.

  4. El modo empresa es similar al autocompletado, la diferencia es que lo empaqueta todo en un solo paquete. Por ejemplo, los desarrolladores de C ++ solo necesitan instalar el modo empresa (el autocompletado necesita un complemento de terceros). Otra diferencia de UI es que la empresa mostrará al candidato automáticamente . Entonces presionas menos teclas en compañía. Es posible hacer lo mismo en autocompletar después de la personalización.

En resumen, la compañía de autocompletar son las dos opciones más populares. La semántica y la expansión hippie también son bienvenidas pero menos utilizadas. Otros son demasiado triviales para mencionar y sus características ya están cubiertas por los cuatro grandes. Por ejemplo, el autocompletado podría usar yasnippet como fuente de entrada (el autocompletado proporciona la IU, pero los candidatos reales son producidos por el back end de yasnippet).

Sugiero usar autocompletar o compañía como complemento de finalización de código principal y semántico o expandir hippie como complemento complementario .

Uso el modo empresa y la expansión hippie porque,

  • Ahora (año 2017) el modo empresa se mantiene más activamente que el autocompletado y tiene más complementos de terceros (por ejemplo, complemento de látex)

  • hippie-expand no es muy activo pero no ocupa la TABclave que está utilizando el modo de empresa / semántico / autocompletado

Si usa el modo empresa para C ++ / Java, es posible que desee modificar company-backends.

Algunos consejos más sobre el modo de empresa,

Es posible que necesite modificar el valor de company-backends. Por ejemplo, suponga que su valor es (company-eclim company-semantic company-clang (company-dabbrev-code company-gtags company-etags company-keywords)). Entonces, si company-eclimpuede obtener candidatos distintos de cero, companycree que está escribiendo Java, por lo que NO ejecutará backends después company-eclim.

Ahora echemos un vistazo (company-dabbrev-code company-gtags company-etags company-keywords). Todos estos cuatro backends se usarán juntos. Por ejemplo, incluso después de company-dabbrev-codehaber obtenido candidatos distintos de cero con éxito, los otros tres backends aún se ejecutan.

En el mundo real, a menudo es necesario reajustar el orden de los backends o agregar nuevos backend ( company-rtagspor ejemplo).

Chen Bin
fuente
¿Cuál es el mejor paquete de autocompletado en Emacs 24 para látex?
doctorado
@doctorate Creo que necesita usar autocompletar y su fuente emacswiki.org/emacs/AutoCompleteSources , pero soy un programador en lugar de un usuario de látex, así que será mejor que verifique en Google más la comunidad de Emacs, muchos académicos allí .
Chen bin
tenga en cuenta que el modo empresa también admite látex. Entonces sugiero compañía en lugar de autocompletar
chen bin
2

Respuesta corta: no conozco ninguno para emacs que sea útil para java. La expansión dinámica no se ocupa de las bibliotecas en su ruta de clase, no sabe nada sobre el código que está escribiendo, solo puede expandirse al texto que ya existe en uno de los búferes. JDE y emacs-eclim intentan proporcionar esta funcionalidad, pero personalmente no me impresionó.

correo electrónico perdido
fuente
0

Respuesta corta: M-/

Respuesta larga: RTFM :-)

Gyom
fuente
66
1, dios espero que la próxima pregunta que veo es "ayudar necesidad con el comando RTFM"
rownage
@rownage: oh, eso es `` info-emacs-manual '' ( C-h r)
SamB
1
¿Qué tal C-h k M-/?
Doug Harris