Vim langsam beim Rendern des Puffers mit LaTeX-Syntaxhervorhebung

1215
llinfeng

Nach der Behebung eines Festplattenfehlers installiere ich GVIM auf meinem Thinkpad X230T-Laptop mit Windows 10. Die Dinge funktionieren gut, mit Ausnahme der Geschwindigkeit, mit der Puffer für *.texDateien gerissen werden. Das Problem ist: mit macht syntax onder Puffer von Latex außergewöhnlich langsam. Hier folgt eine Liste von "Features":

  1. Das Auffrischen eines Puffers der Größe 1920 * 1080 (in Pixel) dauert beim Drücken von Sekunden <C-f>.
  2. Wenn ich den Puffer verkleinere, wird das Rendern schneller. Trotzdem werde ich mindestens eine zweite Verzögerung erfahren. Während der Verzögerung kann ich nur einen leeren Puffer sehen.
  3. Textoperationen sind ebenfalls langsam. Wenn Sie einfach eine neue Zeile durch Drücken von beginnen, owird auch eine Verzögerung von einer Sekunde angezeigt. Dies ist hauptsächlich auf das Rendern des gesamten Puffers nach dem Hinzufügen dieser einzelnen Zeile zurückzuführen: Alle folgenden Zeilen werden für ihre "neue" Position aktualisiert.

Als Beispiel-Screencast: Vim langsam beim Rendern des Puffers mit LaTeX-Syntaxhervorhebung

Ich habe alle in diesem Beitrag vorgeschlagenen Optionen angewendet ( https://stackoverflow.com/questions/8300982/vim-slow-running-latex-files ), bekomme jedoch immer noch die gleiche langsame Rendergeschwindigkeit.

Ich habe diese außergewöhnliche Verlangsamung nur auf meinem X230T erlebt. Bei den _vimrcbeiden anderen Desktop-Rechnern ist das gleiche wie bei mir, und die Rendergeschwindigkeit ist nicht einmal sehr gering. Bei der vorherigen Installation von Windows 7 und 8 auf demselben X230T-Laptop ist das Rendering-Problem ebenfalls nicht aufgetreten.

Zu guter Letzt habe ich für meine Festplatte eine SSD auf meinem X230T, die bisher ziemlich gut funktioniert hat. und ich habe HDD auf den beiden anderen Desktop-Rechnern.

Jeder Rat wäre sehr hilfreich!

Danke vielmals!

Alles Gute,

-Linfeng

4
Haben Sie das am Ende herausgefunden? Ich habe das gleiche auf einem x230t mit OpenBSD. Edd Barrett vor 7 Jahren 0
@EddBarrett, nein habe ich nicht. Am Ende verwende ich die Remotedesktopverbindung auf meinem X230T-Laptop, um auf meinen Heimdesktop-Computer zuzugreifen, der keine Verzögerung beim Rendern anzeigt. Es kann sein, dass X230T für moderne Betriebssysteme zu alt ist. (Ich habe definitiv kein Problem mit dem Rendern von * .tex-Dateien, wenn ich Windows 7 und Windows 8.1 verwendet habe). Viel Glück auf deiner Seite. llinfeng vor 7 Jahren 0
Ich finde, dass das Drehen der Syntax-Hervorhebung hilfreich ist. Edd Barrett vor 7 Jahren 2
Bestimmt! Danke vielmals! Ich habe den Dateityp schon eine Weile auf Null gesetzt :) llinfeng vor 7 Jahren 0
Versuchen Sie, die Datei mit: `vim -u NONE filename.tex` zu öffnen, um das Laden von .vimrc und anderer Skripts für die Sitzung zu deaktivieren. Wenn dies hilfreich ist, lesen Sie [diese Methode] (http://stackoverflow.com/a/12216578/165358), um herauszufinden, wo genau die Verlangsamung liegt. harrymc vor 7 Jahren 0
@harrymc, mein Vim lädt '* .tex'-Dateien ohne Verzögerung, wenn Sie mit den Optionen "-u NONE" beginnen; und haben versucht, das "Profil" zu protokollieren. Die Ausgabe "profile.log" ist jedoch ziemlich kompliziert und ich kann keine Funktion finden, die zum "Rendern" des Puffers aufgerufen wird. Haben Sie eine Idee, in welche Funktion ich schauen soll? llinfeng vor 7 Jahren 0
Um zu klären: Behebt "-u NONE" das Problem, auch wenn die Syntaxhervorhebung aktiviert ist? harrymc vor 7 Jahren 0
Ja, die Option "-u NONE" behebt das Wiedergabeproblem, auch wenn die Syntaxhervorhebung aktiviert ist. llinfeng vor 7 Jahren 0
Dann startet die vimrc-Datei die Verlangsamung. Versuchen Sie, Teile davon selektiv zu löschen, um herauszufinden, wo genau die Ursache liegt (Sicherung durchführen). harrymc vor 7 Jahren 0
@EddBarrett, haben Sie versucht, die Ausgabe von `profile`-ing zu entschlüsseln? Meines ist ziemlich verwirrend, und ich finde kein bestimmtes Protokoll, das die Anzahl der Seitenaufzeichnung aufzeichnet. Ich denke, das ist maschinenspezifisch: Einige Hardware des X230T ist nicht mehr kompatibel mit der "großen" Vim-Distribution, vielleicht? llinfeng vor 7 Jahren 0

3 Antworten auf die Frage

6
Edd Barrett

Das Problem ist, dass die reguläre Ausdrücke-Engine von Vim sehr langsam ist, und ich denke, Latex ist an Regex ziemlich anspruchsvoll.

Ich konnte vim etwas schneller werden, indem ich Folgendes tat:

:syn clear texSectionFold :syn clear texPreamble 

Dies waren die hauptsächlichen beleidigenden Syntaxgruppen-Regexes.

Ich habe sie gefunden, indem ich

:syntime on 

Drücken Sie jetzt ctrl+Leine Tonne Male und warten Sie, bis Vim aufholt. Dann:

:syntime report 

Dies ergab folgende Ausgabe:

 TOTAL COUNT MATCH SLOWEST AVERAGE NAME PATTERN 8.903872 1911 52 0.017387 0.004659 texSectionFold \v%(%(\\begin\.*$\n)@<=^|\\section) 4.979438 1859 0 0.016382 0.002679 texPreamble \v%(\\documentclass)@= 0.634906 1976 182 0.010863 0.000321 texEnvName \v%(\\%(begin|end)\{)@<=\a+\*?\ze\} 0.373173 1859 0 0.000880 0.000201 texArgsEnvNormReq \v(\\begin\{%(theorem|lemma|proposition|corollary|conjecture|definition|remark|example|proof)\*?\}\s*)@<=\{ 0.317732 1859 0 0.000468 0.000171 texArgsEnvNormOpt \v(\\begin\{%(theorem|lemma|proposition|corollary|conjecture|definition|remark|example|proof)\*?\}\s*)@<=\[ 0.223595 1859 0 0.000341 0.000120 texDimen \v-?%(\.[0-9]+|([0-9]+(\.[0-9]+)?))%(pt|pc|bp|in|cm|mm|dd|cc|sp|ex|em)> ... 

Sie sehen also, dass diese beiden Regexen viel teurer sind als andere. Ich verwende keine Falten, daher hatte ich kein Problem, das zu deaktivieren. Nicht sicher, warum es so langsam ist, die Präambel zu finden.

Vielleicht hilft dir das auch, @llinfeng. Hoffentlich!

BEARBEITEN:

Um diese syn clearBefehle beim Start von vim auszuführen, müssen Sie sie eingeben ~/.vim/after/syntax/tex.vim. Es funktioniert nicht in einer ftpluginDatei, da die Syntaxdefinitionen zu diesem Zeitpunkt noch nicht geladen sind.

EDIT2:

Es stellte sich heraus, dass einige der oben genannten Syntaxgruppen von einem Plugin stammen. Das Deaktivieren des Plugins hilft nicht, da andere Syntaxgruppen dann langsam sind. Eesh!

Mein letzter Fix und alles, was ich vom Syntax-Highlight verlange, ist:

$ cat ~/.vim/after/syntax/tex.vim  syn clear syn match texComment "%.*$"  hi def link texComment Comment 

Es ist sehr schnell.

Hallo @Edd, vielen Dank! Mein "syntime report" ist unfreundlicher, wie Sie hier sehen können https://www.dropbox.com/s/guxzuqcuu2p510n/syntime_report_Tex.png?dl=0 Der Unterschied besteht darin, dass meine Verlangsamung beim Rendern möglicherweise zugeschrieben wird buchstäblich alle Anzeigeoptionen. Ich werde jetzt nach einem Weg suchen, Farbe nur für mathematische Ausdrücke zu "malen". llinfeng vor 7 Jahren 0
Ich bin froh, dass das geholfen hat. Ich habe immer noch das Gefühl, dass mit Vim etwas nicht stimmt, wenn diese modernen Maschinen nicht ein paar Regex ausführen können. FWIW, ich habe es auch mit neovim versucht, und dort war es auch so. Edd Barrett vor 7 Jahren 0
Hallo @Edd, hier ist die von mir erstellte Minimum-Syntax-Highlighting-Datei, sie enthält mehr * color * (da ich jedoch die Syntax-Highlighting nicht so gut verstehe, kann es auf alle möglichen Arten beschissen sein): https : //github.com/llinfeng/Vim/blob/X230T/vimfiles/after/syntax/tex.vim llinfeng vor 7 Jahren 0
1
harrymc

Sie haben vim -u NONE filename.texbeim Öffnen der Datei verwendet, um das .vimrcLaden Ihrer und anderer Skripts für die Sitzung zu deaktivieren. Dies hat das Problem behoben.

Die Schlussfolgerung ist, dass etwas, das von der .vimrcDatei gestartet wird, die Verlangsamung verursacht.

Versuchen Sie, Teile der Datei selektiv zu löschen, um herauszufinden, was genau die Ursache ist. Denken Sie daran, eine Sicherungskopie zu erstellen.

Wie oben erwähnt, ist es die in vim eingebaute Syntaxfärbung, die das Problem verursacht, nicht ein Plugin. Edd Barrett vor 7 Jahren 0
@EddBarrett: Ich bin verwirrt zwischen dir und Llinfeng. Er sagt, dass das Hervorheben von .vimrc-Syntax schnell genug ist. Ich weiß nicht, was die Verlangsamung in seinem .vimrc verursacht, aber Sie könnten überprüfen, ob es mit Ihrem gleich ist. Ich kann es nicht überprüfen, da ich kein Latex benutze. harrymc vor 7 Jahren 0
Ohne .vimrc erhalten Sie keine Syntaxhervorhebung. Sie benötigen `: set syntax = on` im vimrc. Edd Barrett vor 7 Jahren 0
@EddBarrett: Man kann dies wahrscheinlich auch während der Ausführung aktivieren, aber ein guter Test könnte die Verwendung einer .vimrc sein, die nur diese Zeile hat. In jedem Fall empfahl ich, die Datei schrittweise neu zu erstellen, bis das Problem wieder auftritt (wenn es wirklich verschwunden ist, wie mir gesagt wurde). harrymc vor 7 Jahren 0
1
llinfeng

Teillösung für Thinkapd X230T per se

Problemerkennung

Wie @Edd vorgeschlagen hat, verwenden Sie :syntime onund syntime report, um die zeitaufwendigste Syntaxhervorhebung zu identifizieren: "group / region / match" ';

Teillösung

Wie in der folgenden URL zu finden, habe ich das tex.vimin das afterVerzeichnis meiner Vim-Distribution geladen ( c:\vim\vimfiles\after\syntax\für meinen Fall):

https://github.com/llinfeng/Vim/blob/X230T/vimfiles/after/syntax/tex.vim

Ergebnis

Wenn ich dieselbe LaTeX-Datei verwende, geht meine verbesserte Leistung wie folgt

Verbesserte Leistung

Offene Frage - wie Sie das Syntax-Highlighting effizient replizieren können

Die Syntax Färbung ist nicht ideal, da im Vergleich zur nativen tex.vimwie gefunden werden c:\vim\vim80\syntax\tex.vim.