2010-12-31 9 views
8

Ich verwende Vim mit TagList in Entwicklung. TagList scheint sehr nett zu sein, aber ein Problem damit ist, dass es lange dauert, um zu aktualisieren, also wenn ich zum Beispiel von der Funktion A zur Funktion B in der gleichen Datei bedeute, dauert es ungefähr 5 Sekunden, bis TagList kommt aktualisiert. Gibt es trotzdem etwas kürzeres Intervall, zum Beispiel eine halbe Sekunde?Vim: TagList Plugin Langsames Update

+0

5 Sekunden hilft, ist zu lang. Ich benutze es auch und es funktioniert gut für mich. sogar eine halbe Sekunde ist zu viel dafür. Ich denke das Problem ist woanders und nicht bei der TagList. Ich benutze auch Ctags und Cscope für Code Browsing und sie sind auch sehr gut. Sie können sie auch versuchen. –

+0

@Rafid K. Abdullah: hast du diese Frage gelesen: http://stackoverflow.com/questions/2169645/vims-autocomplete-is-excruciatingly-slow – eckes

+0

@eckes, ja ich habe gerade getan, aber es ist nicht das, was ich bin frag wirklich. Hast du schon TagList benutzt ?! – Rafid

Antwort

1

Sie können einen Schlüssel für die Funktion binden: TlistRefresh

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

Hmmm ... das ist eine gute Arbeit, deshalb, da es keine andere Antwort gibt, werde ich dies als die akzeptierte Antwort markieren. Aber warten Sie, in meinem Fall, ich nehme an, es gibt einen 5-Sekunden-Timer, der TlistRefresh aufruft, ja? Es könnte also eine gute Idee sein, das zu überprüfen und zu ändern. Ich werde dich wissen lassen, wenn es mir gelingt. – Rafid

+0

Ja, ich war auf der Suche nach etwas in dem Drehbuch, das auf ein Timer-Event oder etwas anderes hinwies, aber nichts war wirklich auffällig. Das einzige, was ich herausfinden konnte, war, dass ein BufEnter-Event alle 5 Sekunden generiert wurde. Es gibt Debug-Optionen zum Aktivieren: TlistDebug und dann: TlistMessages zeigt Ihnen die Ausgabe. Viel Glück und bitte posten Sie eine bessere Lösung. – ThePosey

3

ich das gleiche Problem wie bei Ihnen haben und inspiriert von ThePosey Antwort.

Sie können den „AutoCmd“ Befehl auf Zeile 1678 in der taglist.vim finden, die

autocmd BufEnter * call s:Tlist_Refresh() 

sieht, die für ein BufEnter Ereignis wartet die Tag-Fenster zu aktualisieren.

ich es einfach modifiziert

autocmd BufEnter,CursorMovedI * call s:Tlist_Refresh() 

und es wird Tlist_Refresh wechseln, während Sie den Cursor im Einfügemodus bewegt. Ich löschte CursorMoved Ereignis für es behindert zu viele andere Befehle.

Ich denke, das sollte die Anforderung für die meisten Fälle erfüllen. Der Nebeneffekt ist einige Befehle, die erfordert, dass sich bewegender Cursor ungültig wird.

Edit:

Ein einfacher Weg, diese Linie in der .vimrc Datei gesetzt werden würde:

autocmd CursorMovedI * silent! TlistHighlightTag 

Und BTW, gibt es keinen Befehl TlistRefresh, verwenden TlistHighlightTag statt.

+0

Ich habe Ihre Lösung etwas modifiziert, weil CursorMovedI nur für den Einfügemodus ist, aber ich wollte auch den normalen Modus: 'autocmd BufEnter, CursorMoved, CursorMovedI * silent! TlistHighlightTag' –

1

Art einer alten Frage, aber für taglist 4.6 (mindestens) die Aktualisierungsperiode wird durch die Update (autocmd CURSOR .. Linie 1735)

Für Interaktivität, Tom Yu Antwort gesteuert ist wahrscheinlich die beste Lösung.

3

Sie können versuchen, die Aktualisierungszeit auf 1000 ms einzustellen. Ich habe das mit einer großen Datei gemacht und alles funktioniert sehr gut, die Aktualisierung erfolgt jede Sekunde;

set ut=1000 

sehen, ob es

+0

dies erreicht, was TomYu's Lösung per Polling tut, hat aber den gleichen Nachteil wie jede "polling vs interrupt" -gesteuerte Lösung (dh Interrupt-getrieben wird schneller und verursacht keine unnötigen Operationen. Ich musste 'ut = 250 setzen 'um die UI-Reaktionsfähigkeit zu erhalten, die ich wollte. wenn ich wirklich wollte, dass es nicht auffiel, würde ich es auf 'ut = 100' setzen, weil Ereignisse, die <250 ms sind, von Menschen normalerweise nicht wahrgenommen werden)). –