2010-01-30 12 views
55

La maggior parte delle volte la funzionalità di completamento automatico di Vim funziona correttamente per me, ma a volte sembra che esegua la scansione dei file a cui fa riferimento il file corrente, quindi diventa dolorosamente lento, a volte impiegano diversi secondi per rilasciare il focus di nuovo a me.Il completamento automatico di Vim è terribilmente lento

volte Vim mi dice semplicemente che si tratta di "scanning" altre volte, sta dicendo "tag di scansione"

ho solo questo capita in file di Ruby, e succede soprattutto quando c'è un bisogno nel file .

La mia ipotesi sarebbe che questa è una sorta di funzionalità che controlla i file correlati per le opzioni di completamento automatico, ma io non ne ho davvero bisogno, e preferirei il completamento automatico più rapido.

+1

Che cosa stai usando fullfunc? –

+1

Ho lo stesso problema, ma in C++. Hai avuto questo sotto controllo? Ho provato a giocare con e senza i tag-file, ma continua a scansionare la directory corrente in modo ricorsivo (l'ho messo a punto, per vedere cosa sta facendo e continua a chiamare stat su tutti i file che riesce a trovare). È un ambiente clearcase == slooooow. – falstro

risposta

98

Come ho detto in un commento ho avuto lo stesso problema. Ecco cosa ho trovato;

C'è un'impostazione che indica a VIM dove cercare i completamenti, chiamato complete.

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

questo è il valore predefinito. Il mio problema è (era in realtà ..) il 'i', che analizza tutti i file inclusi. Qui ci sono due problemi, primo, trovare tutti quei file potrebbe richiedere molto tempo, specialmente se, come me, avete

:set path=** 

Secondo problema, una volta trovato, hanno bisogno di essere letto, e se si stiamo usando un file system in rete (sono su clearcase) sia trovare e leggere tutti quei file potrebbe innescare miss della cache, rendendolo dolorosamente lento.

Ho rimosso l'i per ora, poiché ho un tag-file e il più delle volte, ho anche i file rilevanti nei miei buffer (caricati o scaricati) che verranno ricercati come risultato di 'b ' e tu'.

Usa

set complete-=i 

per rimuovere la i dalla lista, notare che questa è locale al buffer.

+0

Grazie mille. Questa è una di queste opzioni di configurazione rilevanti sottoesposte che non sono menzionate nella guida "insert.txt" – sehe

4

Hai un file di tag per il progetto su cui stai lavorando? In caso contrario, prova a generarne uno con esuberante-ctags e Vim dovrebbe prenderlo con il plug-in taglist.

+0

ctags -R nella root del progetto; è il comando se sei su linux – gustavgans

40

Avevo un problema molto simile dall'aggiornamento a Vim 7.3 (da 7.2): stavo usando il (eccellente) ACP plugin e in file sorgenti più lunghi (file C, 1700 LOC), il popup impiegava anni a saltare i suggerimenti quando stavo modificando nella parte inferiore del file.

Utilizzando lo PerformanceValidator (da Softwareverify), ho scoperto che alcuni metodi di piegatura sono stati chiamati più e più volte e comportano un carico del processore molto alto e un completamento lento.

La mia soluzione alternativa era impostare foldmethod (fdm) su manual. E questo lo ha risolto ...

+1

SEI ECCEZIONALE. Il completamento nei file Ruby è stato insolitamente lento per me, in file di dimensioni abbastanza ridotte (~ 100 LOC). Non posso risolverlo. Poi ho letto questo. Io cambio foldmethod in un buffer Ruby in qualcosa che non sia la "sintassi" e il completamento avviene all'istante. Ora, perché sulla terra viene chiamato foldmethod come un matto quando Vim sta facendo il completamento automatico? – Legion

+1

Questo ha funzionato anche per me. E ancora, "perché mai sulla terra viene chiamato foldmethod come un matto quando Vim sta facendo il completamento automatico?" !! – Jason

+1

Darei un +5 se potessi. Gridare a [questo blog] (http://economyofeffort.com/2012/03/01/fixing-slow-vim-auto-completion-with-ruby-files/) per avermi indicato qui. – Kelvin

Problemi correlati