2010-12-31 11 views
8

Używam Vima z TagList w rozwoju. TagList wydaje się być bardzo miły, ale jednym z problemów jest to, że odświeża się dużo czasu, więc jeśli na przykład mam na myśli od funkcji A do funkcji B w tym samym pliku, pobranie TagList zajmuje około 5 sekund zaktualizowany. Czy mimo to interwał jest krótszy, na przykład o pół sekundy?Vim: TagList Plugin Powolna aktualizacja

+0

5 sekund jest zbyt długi. Używam go również i działa dobrze dla mnie. nawet pół sekundy to za dużo. Myślę, że problem jest gdzie indziej, a nie z TagList. Używam również ctags i cscope do przeglądania kodu i są one również bardzo dobre. możesz też je wypróbować. –

+0

@Rafid K. Abdullah: czy przeczytałeś to pytanie: http://stackoverflow.com/questions/2169645/vims-autocomplete-is-excruciatingly-slow – eckes

+0

@eckes, tak, po prostu to zrobiłem, ale to nie jest to, czym jestem naprawdę pytając. Czy korzystałeś już z TagList ?! – Rafid

Odpowiedz

1

Można powiązać klucz do funkcji: TlistRefresh

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

Hmmm ... to dobra robota, więc skoro nie ma innej odpowiedzi, zaznaczę to jako zaakceptowaną odpowiedź. Ale czekaj, w moim przypadku, przypuszczam, że istnieje 5-sekundowy zegar, który wywołuje TlistRefresh, tak? Więc może to być dobry pomysł, aby to sprawdzić i zmienić. Dam ci znać, jeśli mi się uda. – Rafid

+0

Tak, szukałem czegoś w scenariuszu, który wskazywałby wydarzenie z zegarem lub coś, co się działo, ale nic nie pokazało mi się. Jedyne, co mogłem sobie wyobrazić, to zdarzenie BufEnter generowane co 5 sekund. Dostępne są opcje debugowania, aby włączyć: TlistDebug, a następnie: TlistMessages pokazuje wyjście. Powodzenia i proszę zamieścić lepsze rozwiązanie. – ThePosey

3

Mam ten sam problem jak ty i zainspirowany odpowiedź ThePosey użytkownika.

można znaleźć polecenia "autocmd" on line 1678 w taglist.vim który wygląda

autocmd BufEnter * call s:Tlist_Refresh() 

wyczekiwania na wydarzenia BufEnter aby odświeżyć okno tag.

Właśnie zmodyfikowane go

autocmd BufEnter,CursorMovedI * call s:Tlist_Refresh() 

i będzie przełączać Tlist_Refresh podczas gdy kursor porusza się w trybie wstawiania. Usunąłem zdarzenie CursorMoved, ponieważ utrudnia zbyt wiele innych poleceń.

Myślę, że to powinno spełniać wymóg większości przypadków. Efektem ubocznym są niektóre polecenia, które wymagają, aby ruchomy kursor stał się nieprawidłowy.

Edit:

Łatwiejszy sposób byłoby umieścić ten wiersz w pliku .vimrc:

autocmd CursorMovedI * silent! TlistHighlightTag 

I BTW, nie ma polecenia TlistRefresh, zamiast używać TlistHighlightTag.

+0

Zmodyfikowałem twoje rozwiązanie nieznacznie, ponieważ CursorMovedI jest tylko dla trybu wstawiania, ale chciałem również w trybie normalnym: 'autocmd BufEnter, CursorMoved, CursorMovedI * cichy! TlistHighlightTag' –

1

Kind starej pytanie, ale dla taglist 4.6 (przynajmniej) okres aktualizacji jest kontrolowana przez updatetime (autocmd CursorHold .. linia 1735)

Dla interaktywność, odpowiedź Toma Yu jest chyba najlepszym rozwiązaniem.

3

Możesz spróbować ustawić updatetime na 1000ms. Zrobiłem to z dużym plikiem i wszystko działa bardzo dobrze, odświeżanie odbywa się co sekundę;

set ut=1000 

zobaczyć czy to pomaga

+0

pozwala to osiągnąć rozwiązanie TomYu poprzez sondowanie, ale ma tę samą wadę, co każde rozwiązanie oparte na "polling vs interrupt" (tzn. Sterowanie przerwaniami będzie szybsze i nie spowoduje niepotrzebnych operacji. (Musiałem ustawić 'ut = 250 'aby uzyskać responsywność interfejsu, której potrzebowałem, gdybym naprawdę chciał, żeby nie była zauważalna, ustawiłbym ją na' ut = 100', ponieważ zdarzenia, które są <250 ms, na ogół nie są zauważalne przez ludzi)). –