Les grands nombres font-ils tourner Vim lentement?

18

Cela semble être une question vraiment stupide, mais j'ai un fichier Python qui contient un nombre de mille chiffres et ce fichier semble fonctionner très lentement, je ne suis pas sûr qu'il y ait une sorte de traitement en cours que je suis pas au courant.

J'appuie sur line up jet il y a une pause définie de ~ 1 seconde c'est très douloureux!

Je n'ai cela que sur le fichier Python, cela ne se produit pas sur les autres.

Après avoir supprimé le numéro, le fichier fonctionne à nouveau normalement ...

Voici le numéro:

number=("""7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450""")

Ce n'est même pas vraiment un nombre, c'est une chaîne.

baxx
la source
2
Confirmé ici; ne se produit pas si le fichier est .txt. Un motif de regexp de mise en évidence de la syntaxe s'égare, je suppose.
Rmano
Comme il s'agit d'une mise en évidence de la syntaxe, la solution de contournement simple consiste à définir synmaxcolun nombre limité (comme la largeur de votre terminal).
Slade

Réponses:

23

Je peux reproduire cela avec le syntax/python.vimqui est livré avec Vim 7.4.663.

En utilisant :syntime, cela semble être causé par le groupe / modèle de syntaxe suivant:

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

Vous devez signaler ce problème à son responsable (son nom et son adresse e-mail figurent dans l'en-tête du script).

Soit dit en passant, je ne pouvais pas reproduire cela à l'origine, car j'utilise un script de syntaxe alternative d' ici . Passer à cela (si cela correspond à vos besoins) serait également une solution de contournement viable.


Edit: En examinant plus avant la cause probable, cela semble être dû aux performances pathologiques du nouveau moteur d'expression rationnelle basé sur NFA. Avec :set regexpengine=1, je ne vois pas ce ralentissement énorme. Ainsi, une solution de contournement / correctif possible serait de passer à l'ancien moteur pour cette correspondance de syntaxe; cela peut être fait en ajoutant \%#=1au motif (cp. :help NFA).

Ingo Karkat
la source
merci @Ingo, je n'ai jamais rien rapporté auparavant mais je suis heureux de le faire. J'ai le fichier de syntaxe /usr/share/vim/vim74/syntax, le développeur en haut est Neil Schemenauer <[email protected]>. Puis-je te demander; est-ce la raison pour laquelle vous avez modifié les fichiers de syntaxe à l'origine? Merci
baxx
Oui c'est vrai; la dernière version date du 16 juillet 2014, il est donc probable qu'elle soit toujours maintenue et vous obtiendrez une réponse de l'auteur. Vous pouvez le diriger vers cela, votre question, car elle contient déjà un bel exemple reproductible.
Ingo Karkat
Je viens de trouver ma syntaxe alternative Python quelque part; Je n'édite que rarement les fichiers Python, donc je n'y ai pas beaucoup réfléchi jusqu'à présent.
Ingo Karkat
merci @Ingo, j'ai changé les fichiers de syntaxe et ce n'est plus si lent. J'ai peur que les moteurs regex soient un peu au-delà de ma compréhension, je vais envoyer un e-mail au développeur, je suis heureux de réaliser des tests.
baxx