2010-01-30 12 views
55

La mayoría de las veces la característica de autocompletar en Vim funciona bien para mí, pero a veces parece escanear archivos a los que hace referencia el archivo actual, y luego se vuelve extremadamente lento, algunas veces demorando varios segundos en liberar el foco de vuelta a mí.La autocompleta de Vim es insoportablemente lenta

veces Vim me dice simplemente que se trata de "escaneo" de otros tiempos, que está diciendo "etiquetas de exploración"

he hecho más que esto suceda en los archivos de Ruby, y sucede sobre todo cuando hay un requerir en el archivo .

Supongo que este es un tipo de característica que comprueba los archivos relacionados para las opciones de autocompletar, pero realmente no lo necesito y preferiría una autocompletar más rápida.

+1

¿Qué completefunc estás usando? –

+1

Tengo el mismo problema, pero en C++. ¿Lo tienes bajo control? He intentado jugar con y sin tags-files, pero sigue escaneando el directorio actual de manera recursiva (lo busqué, para ver qué está haciendo, y sigue llamando a stat en todos los archivos que puede encontrar). Es un entorno claro == slooooow. – falstro

Respuesta

98

Como mencioné en un comentario tuve el mismo problema. Esto es lo que encontré;

Hay una configuración que le dice a VIM dónde buscar terminaciones, llamada complete.

:set complete 
complete=.,w,b,u,t,i 

este es el valor predeterminado. Mi problema es (fue en realidad ...) la 'i', que escanea todos los archivos incluidos. Aquí hay dos problemas, primero, encontrar todos esos archivos podrían tomar bastante tiempo, especialmente si, como yo, tiene

:set path=** 

Segundo problema, una vez encontrado, que necesitan para ser leído, y si Estoy usando un sistema de archivos en red (estoy claro), tanto encontrar como leer todos esos archivos podría desencadenar errores de caché, lo que lo hace muy lento.

He eliminado el i por el momento, dado que tengo un archivo de etiquetas y la mayoría de las veces, también tengo los archivos relevantes en mis buffers (cargados o descargados) que se buscarán como resultado de 'b ' y tú'.

Uso

set complete-=i 

para eliminar la i de la lista, tenga en cuenta que este es local al búfer.

+0

Muchas gracias. Esta es una de estas opciones de configuración irrelevantes y poco expuestas que no se mencionan en la ayuda 'insert.txt' – sehe

4

¿Tiene un archivo de etiquetas para el proyecto en el que está trabajando? Si no, intente generar uno con ctags exuberantes y Vim debería levantarlo con el taglist pluglin.

+0

ctags -R en la raíz del proyecto; es el comando si estás en linux – gustavgans

40

Tuve un problema muy similar desde que actualicé a Vim 7.3 (desde 7.2): estaba usando (excelente) ACP plugin y en archivos fuente más largos (archivos C, 1700 LOC), la ventana emergente tardó años en pasar por las sugerencias cuando estaba editando cerca de la parte inferior del archivo.

Usando el PerformanceValidator (de Softwareverify), descubrí que algunos métodos de plegado se llamaban una y otra vez y daban lugar a una carga de procesador muy alta y una finalización lenta.

Mi solución fue establecer el foldmethod (fdm) en manual. Y esto lo resolvió ...

+1

ERES EXCELENTE. La finalización en los archivos de Ruby fue increíblemente lenta para mí, en archivos que tenían un tamaño bastante trivial (~ 100 LOC). No pudo resolverlo Luego leo esto. Cambio el método de fold en un buffer de Ruby a cualquier cosa que no sea "sintaxis" y la finalización ocurre instantáneamente. Ahora, ¿por qué en la tierra se dice que los métodos de plegado son locos cuando Vim está haciendo autocompletar? – Legion

+1

Esto funcionó para mí también. Y otra vez, "¿por qué demonios se dice que los métodos se repiten como locos cuando Vim se está autocompletando?" – Jason

+1

Daría un +5 si pudiera. Grite a [este blog] (http://economyofeffort.com/2012/03/01/fixing-slow-vim-auto-completion-with-ruby-files/) para señalarme aquí. – Kelvin

Cuestiones relacionadas