Emacs no puede competir con otro IDE si no tiene una función de autocompletar. Autocompletar simplemente me convierte en un programador más eficiente. Sé de la extensión del modo Autocompletar , pero no funciona con C ++.
¿Cómo puedo lograr un autocompletado inteligente y eficiente para C ++?
Esta pregunta fue originalmente hecha por Malabarba sobre la propuesta del Área 51: ¿Cómo obtener una autocompletación inteligente en C ++?
c++
completion
Luke
fuente
fuente
Respuestas:
Descargo de responsabilidad: soy el autor de irony-mode
Si solo desea la finalización automática inteligente, puedo recomendar el modo ironía con la ironía de la compañía .
Otra herramienta que aún no se ha citado es emacs-ycmd .
fuente
irony-mode
clang_codeCompleteAt
con una TU analizada (pero los cambios no guardados) demoran de 3 a 5 segundos. ¿Esirony-mode
más rápido que esto?Mira mi guía . Enumera varios métodos para la finalización automática en C / C ++.
Esas opciones son:
Usando ironía . Muy recomendable, ya que utiliza Clang y es fácil de configurar en comparación con otras soluciones.
Usando el analizador incorporado de Emacs. Es el mejor autocompletado que puede obtener desde el analizador de Emacs, Semantic, pero sería lento en proyectos grandes como el kernel de Linux.
Usando el
company-mode
paquete concompany-clang
. Proporciona un código de finalización correcto para las rutas de inclusión del sistema, ya que puede obtener automáticamente las rutas de Clang, pero tiene que hacer alguna configuración para el proyecto local.Utilizando
company-mode
concompany-gtags
. Utiliza la base de datos de etiquetas generada a partir de GNU Global como finalización. Puede usar esto para proporcionar código completo localmente a su proyecto. No es exactamente inteligente, ya que arroja todo dentro de la base de datos generada.rtags
va más allá al proporcionar un servidor para análisis en vivo. Pero es complicado configurarlo en comparación con la solución pura de Elisp.fuente
He tenido un gran éxito con RTags + Company .
RTags necesita un demonio
rdm
que se ejecute por separado y que utilice el sonido metálico para completar el código, navegar por el código y refactorizar.rdm
También funciona como una base de datos de símbolos, lo que significa que el autocompletado es mucho más rápido que cualquier solución que solo llame directamenteclang_codeCompleteAt
.Rdm necesita información de las banderas de compilación para sus proyectos que pueden ser una molestia, pero si usted sigue el consejo del RTags página y enlace simbólico
gcc-rtags-wrapper.sh
agcc
,g++
,cc
yc++
rdm automáticamente se actualiza con las nuevas banderas de compilación de recompilación.fuente
Solución 1: modo empresa + clang
El único problema es que necesita decirle al modo empresa dónde buscar los archivos de encabezado c / c ++ de su proyecto.
Si usa cmake, puede dejar que https://github.com/redguardtoo/cpputils-cmake haga la configuración por usted (SUGERENCIA: Soy el autor de cpputils-cmake).
O
Solución 2: company-mode + gnu global
Nada más que decir, necesita construir las etiquetas con la herramienta global cli de gnu, como otros mencionaron.
fuente
He estado usando cmake-ide para configurar rtags, flycheck, ironía y company-clang.
¡Ahora puede configurar su sistema de compilación y sus complementos favoritos de análisis estático emacs al mismo tiempo!
EDITAR: Tenga en cuenta que el clang de la compañía proporciona autocompletados, que era la característica que estaba buscando. cmake-ide también puede configurar flycheck y rtags, lo que agrega varias características similares a IDE.
fuente
Mx modo semántico
www.gnu.org/software/emacs/manual/html_node/semantic/Using-Semantic.html#Using-Semantic
&&
Tablas de etiquetas
encontrar . -name "*. [chCH]" -print | etags -
www.gnu.org/software/emacs/manual/html_node/emacs/Tags.html
etags , ctags - genera un archivo de etiqueta para Emacs, vi
manpages.debian.org/cgi-bin/man.cgi?query=etags&apropos=0&sektion=0&manpath=Debian+8+jessie&format=html&locale=en
CMi (o M-TAB) finalización en el punto. Si el modo semántico está habilitado, intenta usar los datos del analizador semántico. Si el modo Semántico está deshabilitado o falla, intenta completar usando la tabla de etiquetas seleccionadas (ver Etiquetas)
http://www.gnu.org/software/emacs/manual/html_node/emacs/Symbol-Completion.html#index-C_002dM_002di
METRO-. (find-tag) solicita el nombre de la etiqueta && salta a la definición
http://www.gnu.org/software/emacs/manual/html_node/emacs/Find-Tag.html#index-M_002d_002e
fuente