2010-08-11 10 views
8

¿Cómo habilito la finalización automática en Vim?Vim C++ autocompletar

He intentado hacer esto, pero no soy competente con el archivo vimrc, etc., así que no funcionó. ¿Me puede dar instrucciones paso a paso sobre cómo hacer esto?


Editar

He intentado instalar OmniCppComplete. Seguido las instrucciones, pero cuando trato de usarlo me sale el siguiente error:

Error detected while processing function omni#cpp#complete#Main..24_InitComplete:

line 24:

E10: \ should be followed by /, ? or &

+1

¿Ha comprobado http://vim.wikia.com/wiki/C%2B%2B_code_completion? – tkalve

+0

Si solo lo necesita dentro de un archivo, puede usar ctrl + p para buscar hacia atrás y ctrl + n para buscar hacia adelante. Pero para buscar archivos incluidos, realmente no sé. Espero que alguien más lo haga. Esto solo funciona para vim 7! – martiert

Respuesta

4

Las instrucciones detalladas Auto complete (archive.org) Tipo de primeros caracteres y pulse Ctrl> P (para buscar hacia atrás) o Ctrl> N (por búsqueda directa), enumera todas las opciones disponibles o la completa.

Uso vim7.2 (autocompletado se introdujo en vim7) y estos controles funcionan bien.

+0

¿Funciona esto para los archivos incluidos? –

+2

Sí en vim7, no estoy seguro si está disponible en versiones anteriores. – DumbCoder

+0

Creo que esto solo funciona escaneando otras palabras usadas en el archivo actual o en un archivo de diccionario que especifique. En Vim, escriba ": help compl-generic" para obtener detalles sobre cómo funciona esto y sus limitaciones. – NeilDurant

4

Vim por defecto realizará la finalización basada en palabras en el archivo usando Ctrl-N o Ctrl-P, que es útil para variables locales referenciadas recientemente, etc., y funciona para código en cualquier idioma o incluso texto ordinario (útil para completar nombres difíciles de deletrear). Sin embargo, no lo hace de forma semántica o con referencia a los tipos reales que se le permiten en el contexto particular que está escribiendo. Para ello tendrá que install ctags, y luego en/tipo/usr incluir:

ctags -f ~/.vim/stdtags -R --c++-kinds=+p --fields=+iaS --extra=+q . 

Y luego agregar esto a su .vimrc:

set nocp 
filetype plugin on 
map <C-L> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR><CR> 

set tags=~/.vim/stdtags,tags,.tags,../tags 

autocmd InsertLeave * if pumvisible() == 0|pclose|endif 

Esto también hará que las etiquetas de recarga Ctrl-L, y así recoger nuevas etiquetas de autocompletar, desde el directorio actual.

+0

¿Qué hacen los ctags? ¿Puedes explicarme qué hacen los comandos que has dado? ¿Esto solo funciona para cosas locales? Necesito esto para trabajar en un gran proyecto. –

+2

¿Esto también se autocompletará desde los archivos de encabezado incluidos? – martiert

+1

Ctags indexa el código que escribe y almacena información semántica al respecto, que luego se puede consultar para encontrar palabras completas, ubicar usos de funciones/variables, etc. "establecer nocp" saca vim del modo "compatible", que se requiere para los siguientes comandos. "filetype plugin on" habilita vim para hacer cosas basadas en el tipo de archivo (es decir, C++). La línea "map ..." establece una asignación de teclas para que Ctrl-L llame a ctags para actualizar su índice. El "set tags = ..."línea define dónde se almacena la información de la etiqueta, que son lugares estándar. La línea" autocmd "cierra la ventana de finalización. – NeilDurant

2

Mi favorito es clang_complete here. Es muy fácil de instalar y la configuración predeterminada en el documento ReadMe funciona bien. No necesita generar las etiquetas, Muestra automáticamente las opciones completas cuando estén disponibles. También puede resaltar los errores de sintaxis .