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?
20
complete.el
probar 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.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).
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 de
hippie-expand-try-functions-list
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.
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.
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
TAB
clave que está utilizando el modo de empresa / semántico / autocompletadoSi 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, sicompany-eclim
puede obtener candidatos distintos de cero,company
cree que está escribiendo Java, por lo que NO ejecutará backends despuéscompany-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 decompany-dabbrev-code
haber 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-rtags
por ejemplo).fuente
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ó.
fuente
Respuesta corta:
M-/
Respuesta larga: RTFM :-)
fuente
C-h r
)C-h k M-/
?