Bringen große Zahlen Vim dazu, langsam zu laufen?


18

Dies scheint eine wirklich blöde Frage zu sein, aber ich habe eine Python-Datei mit einer tausendstelligen Nummer und diese Datei scheint sehr langsam zu laufen. Ich bin mir nicht sicher, ob irgendeine Art von Verarbeitung stattfindet bin mir nicht bewusst.

Ich drücke Line-Up jund es gibt eine Pause von ~ 1 Sekunde, die sehr schmerzhaft ist!

Ich habe dies nur in der Python-Datei, bei anderen kommt es nicht vor.

Nach dem Löschen der Nummer funktioniert die Datei wieder normal ...

Hier ist die Nummer:

number=("""7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450""")

Es ist nicht einmal eine Zahl, es ist eine Zeichenfolge.


2
Bestätigt hier; passiert nicht, wenn die Datei ist .txt. Ich nehme an, dass einige Syntax-Highlight-Regexp-Muster in die Irre gehen.
Rmano

Da dies mit der Syntaxhervorhebung zusammenhängt, besteht die einfache Abhilfemaßnahme darin synmaxcol, eine begrenzte Anzahl festzulegen (z. B. die Breite Ihres Terminals).
Slade

Antworten:


23

Ich kann das mit dem reproduzieren, der syntax/python.vimmit Vim 7.4.663 ausgeliefert wird.

Bei Verwendung von :syntimescheint dies auf die folgende Syntaxgruppe / das folgende Syntaxmuster zurückzuführen zu sein:

TOTAL      COUNT  MATCH   SLOWEST     AVERAGE   NAME               PATTERN
73.870736   20     0       3.940215    3.693537  pythonNumber       \%(^\|\W\)\@<=\d*\.\d\+\%([eE][+-]\=\d\+\)\=[jJ]\=\>

Sie sollten dieses Problem seinem Betreuer melden (sein Name und seine E-Mail-Adresse befinden sich im Header des Skripts).

Übrigens konnte ich dies ursprünglich nicht reproduzieren, da ich von hier aus ein alternatives Syntaxskript verwende . Ein Wechsel dorthin (wenn es Ihren Anforderungen entspricht) wäre auch eine praktikable Lösung.


Edit: Wenn man die wahrscheinliche Ursache genauer untersucht, scheint dies auf die pathologische Leistung der neuen NFA-basierten Regexp-Engine zurückzuführen zu sein. Mit :set regexpengine=1sehe ich keine große Verlangsamung. Ein möglicher Workaround / Fix wäre also, für diese Syntaxübereinstimmung auf die alte Engine zu wechseln. Dies kann durch Voranstellen \%#=1des Musters (vgl. :help NFA) erfolgen.


danke @Ingo, ich habe noch nie etwas gemeldet, aber ich bin glücklich, das zu tun. Ich habe die Syntaxdatei in /usr/share/vim/vim74/syntaxder der Entwickler ganz oben steht Neil Schemenauer <nas@python.ca>. Kann ich dich fragen; haben Sie deshalb ursprünglich Syntaxdateien geändert? Danke
baxx

Ja, das ist richtig; Die neueste Version ist vom 16. Juli 2014, wird also wahrscheinlich noch gepflegt, und Sie erhalten eine Antwort vom Autor. Sie können ihn auf diese Frage hinweisen, da sie bereits ein schönes reproduzierbares Beispiel enthält.
Ingo Karkat,

Ich habe gerade meine alternative Python-Syntax gefunden. Ich bearbeite Python-Dateien nur selten, daher habe ich mir bisher nicht so viele Gedanken gemacht.
Ingo Karkat

danke @Ingo, ich habe die Syntaxdateien geändert und es ist nicht mehr so ​​langsam. Ich fürchte, die Regex-Engines gehen etwas über mein Verständnis hinaus. Ich sende dem Entwickler jedoch eine E-Mail, ich bin froh, irgendwelche Tests durchführen zu können.
Baxx
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.