Vim verlangsamt sich mit der Zeit bei aktivierter Syntax

11

Kann ich irgendetwas tun, um syntax onVim zu verwenden?

Sobald ich etwas Wesentliches öffne, ist es nach einer Weile fast unmöglich, es zu bearbeiten. Jeder Tastendruck verursacht eine Verzögerung. Wenn ich die Syntaxhervorhebung ausschalte oder vim neu starte, ist das wieder in Ordnung.

Ich habe synmaxcolauf 120 gesetzt. Die Beispiel-Ruby-Datei ist nur 59 Zeilen lang und darf 80 Zeichen nicht überschreiten.

Ich benutze vim-rubyund vim-rails.

Das Problem ist, dass sich die Verzögerung mit der Zeit zu akkumulieren scheint. Wenn ich die Datei von Grund auf öffne, ist das in Ordnung. Nach einer Weile wird es immer langsamer.

Firedev
quelle
1
Haben Sie versucht, dies mit zu replizieren vim -Nu NONE -c 'syntax on'? Haben Sie die Debugging-Tipps für diesen Beitrag
befolgt
Welcher Dateityp? Irgendein?
Romainl
1
Rubin. In der Tat kann es mit bearbeitet werden, -u NONEalso muss es dann ein Plugin sein.
Vermutlich
Das Problem ist jedoch, dass sich die Verzögerung mit der Zeit zu akkumulieren scheint. Wenn ich die Datei von Grund auf öffne, ist das in Ordnung. Nach einer Weile wird es immer langsamer.
Firedev

Antworten:

13

Neuere Vim-Versionen verfügen über einen :syntimeBefehl zur Fehlerbehebung bei der Langsamkeit der Syntaxhervorhebung, indem ein Bericht darüber erstellt wird, wie lange es dauert, bis jede Syntaxgruppe übereinstimmt. Dies ist sehr hilfreich und ermöglicht es Ihnen, den Täter schnell zu finden. Der einzige Nachteil ist, dass Sie einen (normalerweise "RIESIGEN") Build von Vim mit aktivierter Profilerstellung benötigen. :help :syntimebietet gute Anweisungen zur Verwendung.

Alternativ können Sie versuchen, einzelne Syntax-Skripte aus ~/.vim/syntax/und $VIMRUNTIME/syntax/(entsprechend dem aktuellen Stand 'filetype') zu entfernen, und anschließend einen weiteren Drilldown durchführen, indem Sie Teile der Syntaxdefinitionen im Skript entfernen.

Ingo Karkat
quelle
Hmm interessant, hört sich so an, als ob dies etwas mit Tags zu tun hat. Die oberste Zeile, die am meisten Zeit in Anspruch nimmt, enthält Methoden aus meinen anderen Projekten. TOTAL COUNT MATCH SLOWEST AVERAGE NAME PATTERN 0.129674 247 182 0.002365 0.000525 rubyMethodNameTag \C\<\%(roi\|paginate\|admin_index_attributes\|facilities\|manager\|net_price?\ ....- Dies ist eindeutig aus dem anderen Ordner. Tags deaktivieren?
Firedev
Verwenden Sie ein Plugin, das Tags wie vim-easytags hervorhebt ? Das könnte tatsächlich zu einer Verlangsamung führen.
Ingo Karkat
Ja, deaktiviert, nicht die Zahlen sind wieder gesund. Vielen Dank.
Firedev
Hmm jetzt handelt es wieder, diesmal ist es: 0.121880 2078 54 0.002260 0.000059 rubySymbol []})\"':]\@<!\%(\h\|[^\x00-\x7F]\)\%(\w\|[^\x00-\x7F]\)*[!?]\=:[[:space:],]\@= - Kann ich etwas dagegen tun?
Firedev
1
Es könnte die neue Regexp-Engine sein; versuchen Sie es :set regexpengine=1(am besten in einer neuen Vim-Instanz, bevor Sie die Ruby-Datei öffnen).
Ingo Karkat
5

Ein weiterer typischer Engpass im Syntax-Highlight von vim ist das Falten. Das Bearbeiten kann sehr langsam werden, wenn eine Falte viele Syntaxelemente enthält (was im Grunde bedeutet, dass sie viele Zeilen überschreitet), da vim die gesamte Syntax für jedes eingefügte Zeichen aktualisiert.

Wenn dies der Fall ist, empfehle ich die Verwendung des FastFold- Plugins. Dieses Plugin identifiziert Syntaxfalten und ersetzt sie durch manuelle Falten, wodurch die Syntaxhervorhebung von vim viel schneller wird.

Vitor
quelle
1

Folgendes habe ich am Ende getan:

  • Entfernt xolox/vim-easytags
  • Entfernt xolox/vim-misc
  • Ersetzt kien/ctrlp d11wtq/ctrlp_bdeleteund tacahiroy/ctrlp-funkymit junegunn/fzf
  • einstellen regexpengine=1

Im Moment ist Vim glatt wie Butter, aber ich habe keine Tags mehr. Seufzer...

Firedev
quelle
1
In Vim ist die Unterstützung von Tags integriert. Sie benötigen keine Plugins von Drittanbietern (außer ctags, um die Tags-Datei zu generieren). Siehe Artikel über mühelose Ctags mit Git von Tim Pope. Ich benutze dies und es wirkt Wunder. Siehe auch, :help tag-commandsum zu einem Tag zu springen. Ich halte ctags für ziemlich wichtig, wenn ich mit Vim arbeite. Es macht die Navigation super einfach und Sie können sogar automatisch vervollständigen :help i_Ctrl-x_Ctrl-]!
Akshay