¿Los números grandes hacen que vim corra lentamente?


18

Esto parece una pregunta realmente tonta, pero tengo un archivo Python que tiene un número de mil dígitos y ese archivo parece estar funcionando muy lentamente, no estoy seguro de si hay algún tipo de procesamiento en curso. No estoy al tanto.

Presiono alinear jy hay una pausa definitiva de ~ 1 segundo, ¡eso es muy doloroso!

Sin embargo, solo tengo esto en el archivo Python, no sucede en otros.

Después de eliminar el número, el archivo vuelve a funcionar normalmente ...

Aquí está el número:

number=("""7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450""")

Ni siquiera es un número realmente, es una cadena.


2
Confirmado aquí; no sucede si el archivo es .txt. Supongo que algunos patrones de regexp resaltan la sintaxis.
Rmano

Dado que esto está relacionado con el resaltado de sintaxis, la solución simple sería establecer synmaxcolun número limitado (como el ancho de su terminal).
Slade

Respuestas:


23

Puedo reproducir esto con el syntax/python.vimque viene con Vim 7.4.663.

Usando :syntime, esto parece ser causado por el siguiente grupo / patrón de sintaxis:

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

Debe informar este problema a su responsable de mantenimiento (su nombre y dirección de correo electrónico se encuentran en el encabezado del script).

Por cierto, originalmente no pude reproducir esto, porque uso una secuencia de comandos de sintaxis alternativa desde aquí . Cambiar a eso (si cumple con sus requisitos), también sería una solución viable.


Editar: Mirando más a fondo la causa probable, esto parece deberse al rendimiento patológico del nuevo motor regexp basado en NFA. Con :set regexpengine=1, no veo esa gran desaceleración. Entonces, una posible solución / solución sería cambiar al motor anterior para esa coincidencia de sintaxis; Esto se puede hacer anteponiendo \%#=1al patrón (cp. :help NFA).


gracias @Ingo, nunca he informado nada antes, pero estoy feliz de hacerlo. Tengo el archivo de sintaxis /usr/share/vim/vim74/syntax, el desarrollador en la parte superior es Neil Schemenauer <nas@python.ca>. Te puedo preguntar; ¿Es por esto que originalmente cambiaste los archivos de sintaxis? Gracias
baxx

Si, eso es correcto; la última versión es del 16 de julio de 2014, por lo que es probable que aún se mantenga y obtendrá una respuesta del autor. Puede indicarle esto, su pregunta, ya que contiene un buen ejemplo reproducible.
Ingo Karkat

Acabo de encontrar mi sintaxis alternativa de Python de alguna manera; Raramente edito archivos de Python, por lo que no he pensado mucho hasta ahora.
Ingo Karkat

gracias @Ingo, he cambiado los archivos de sintaxis y ya no es tan lento. Me temo que los motores regex están un poco más allá de mi comprensión, aunque enviaré un correo electrónico al desarrollador, estoy feliz de llevar a cabo cualquier prueba.
baxx
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.