2010-12-31 13 views
8

Sto utilizzando Vim con TagList in fase di sviluppo. TagList sembra essere molto carino, ma un problema è che ci vuole molto tempo per rinfrescare, quindi se per esempio intendo dalla funzione A alla funzione B nello stesso file, ci vogliono circa 5 secondi affinché TagList ottenga aggiornato. Esiste comunque la possibilità di ridurre questo intervallo, ad esempio mezzo secondo?Vim: Plugin TagList Aggiornamento lento

+0

5 secondi è troppo lungo. Lo sto anche usando e funziona bene per me. anche mezzo secondo è troppo per questo. Penso che il problema sia altrove e non con TagList. Uso anche ctags e cscope per la navigazione del codice e sono anche molto buoni. puoi provarli pure –

+0

@Rafid K. Abdullah: hai letto questa domanda: http://stackoverflow.com/questions/2169645/vims-autocomplete-is-excruciatingly-slow – eckes

+0

@eckes, sì, l'ho appena fatto, ma non è quello che sono chiedendo davvero. Hai usato TagList prima ?! – Rafid

risposta

1

è possibile associare un tasto per la funzione: TlistRefresh

map <silent> <F1> :TlistRefresh<CR> 
+0

Hmmm ... è un buon lavoro, quindi visto che non c'è altra risposta, la contrassegnerò come la risposta accettata. Ma aspetta, nel mio caso, suppongo che ci sia un timer di 5 secondi che chiama TlistRefresh, sì? Quindi potrebbe essere una buona idea controllarlo e cambiarlo. Ti farò sapere se ci riesco. – Rafid

+0

Sì, stavo cercando qualcosa nella sceneggiatura che indicava un evento del timer o qualcosa che accadeva, ma nulla mi sembrava davvero eccessivo. L'unica cosa che potevo capire era che un evento BufEnter veniva generato ogni 5 secondi. Ci sono opzioni di debug per abilitare: TlistDebug e poi: TlistMessages ti mostra l'output. Buona fortuna e invia per favore una soluzione migliore. – ThePosey

3

Ho lo stesso problema come la tua e ispirato dalla risposta di ThePosey.

È possibile trovare il comando "autocmd" on line 1678 nel taglist.vim che guarda

autocmd BufEnter * call s:Tlist_Refresh() 

che attende un evento BufEnter per aggiornare la finestra di tag.

ho appena modificato per

autocmd BufEnter,CursorMovedI * call s:Tlist_Refresh() 

e sarà alternare Tlist_Refresh mentre il cursore si muove in modalità di inserimento. Ho eliminato l'evento CursorMoved perché ostacola troppi altri comandi.

Penso che questo dovrebbe soddisfare il requisito per la maggior parte dei casi. L'effetto collaterale sono alcuni comandi che richiedono che il cursore mobile non sia più valido.

Edit:

Un modo più semplice sarebbe stato messo questa riga nel file .vimrc:

autocmd CursorMovedI * silent! TlistHighlightTag 

E BTW, non esiste un comando TlistRefresh, utilizzare al posto TlistHighlightTag.

+0

Ho modificato leggermente la tua soluzione perché CursorMovedI è solo per la modalità di inserimento ma volevo anche in modalità normale: 'autocmd BufEnter, CursorMoved, CursorMovedI * silent! TlistHighlightTag' –

1

Tipo di una vecchia questione, ma per taglist 4.6 (almeno) il periodo di aggiornamento è controllato dal UpdateTime (autocmd CursorHold .. linea 1735)

per l'interattività, la risposta di Tom Yu è probabilmente la soluzione migliore.

3

Si può provare a impostare l'aggiornamento a 1000 ms. L'ho fatto con un grosso file e tutto funziona molto bene, l'aggiornamento avviene ogni secondo;

set ut=1000 

vedere se aiuta

+0

questo compie ciò che la soluzione di TomYu fa tramite il polling, ma ha lo stesso svantaggio di qualsiasi soluzione guidata "polling vs interrupt" (cioè l'interruzione guidata sarà più veloce e non causerà operazioni inutili. (Ho dovuto impostare 'ut = 250 'per ottenere la reattività dell'interfaccia utente che volevo. Se volessi davvero che non fosse evidente, lo imposterei su' ut = 100' perché gli eventi che sono <250 ms non sono generalmente percepibili dagli umani)). –

Problemi correlati