Làm số lượng lớn làm cho vim chạy chậm?


18

Đây có vẻ là một câu hỏi thực sự khó hiểu, nhưng tôi có một tệp Python có một số trong đó dài cả nghìn chữ số và tệp đó dường như đang chạy rất chậm, tôi không chắc có cách xử lý nào xảy ra không Tôi không biết.

Tôi nhấn dòng jvà có một khoảng dừng nhất định ~ 1 giây đó là rất đau!

Tôi chỉ có cái này trên tệp Python, nhưng nó không xảy ra với người khác.

Sau khi xóa số, tập tin sẽ hoạt động bình thường trở lại ...

Đây là số:

number=("""7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450""")

Nó thậm chí không phải là một con số thực sự, đó là một chuỗi.


2
Khẳng định ở đây; không xảy ra nếu tập tin là .txt. Một số cú pháp làm nổi bật mô hình regrec đi lạc hướng, tôi cho rằng.
Rmano 22/03/2015

Vì đây là cú pháp tô sáng liên quan, cách giải quyết đơn giản sẽ được đặt synmaxcolthành một số lượng giới hạn (chẳng hạn như chiều rộng của thiết bị đầu cuối của bạn).
Slade

Câu trả lời:


23

Tôi có thể tái tạo điều này với các syntax/python.vimtàu có Vim 7.4.663.

Sử dụng :syntime, điều này dường như được gây ra bởi nhóm / mẫu cú pháp sau:

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

Bạn nên báo cáo vấn đề này cho người bảo trì (tên và địa chỉ email của anh ấy nằm trong tiêu đề của tập lệnh).

Ngẫu nhiên, ban đầu tôi không thể sao chép điều này, vì tôi sử dụng một tập lệnh cú pháp thay thế từ đây . Chuyển sang điều đó (nếu nó phù hợp với yêu cầu của bạn), cũng sẽ là một cách giải quyết khả thi.


Chỉnh sửa: Nhìn xa hơn vào nguyên nhân có thể, điều này dường như là do hiệu suất bệnh lý của công cụ regrec dựa trên NFA mới. Với :set regexpengine=1, tôi không thấy sự chậm chạp to lớn đó. Vì vậy, một cách khắc phục / sửa lỗi có thể sẽ là chuyển sang công cụ cũ cho cú pháp khớp đó; điều này có thể được thực hiện bằng cách thêm vào \%#=1mẫu (cp. :help NFA).


cảm ơn @Ingo, tôi chưa bao giờ báo cáo bất cứ điều gì trước đây nhưng tôi rất vui khi làm điều đó. Tôi có tập tin cú pháp trong /usr/share/vim/vim74/syntax, nhà phát triển ở trên cùng là Neil Schemenauer <nas@python.ca>. Tôi có thể hỏi bạn không; Đây có phải là lý do tại sao bạn thay đổi tập tin cú pháp ban đầu? Cảm ơn
baxx 22/03/2015

Vâng đúng vậy; phiên bản mới nhất là từ ngày 16 tháng 7 năm 2014, vì vậy có khả năng nó vẫn đang được duy trì và bạn sẽ nhận được câu trả lời từ tác giả. Bạn có thể chỉ cho anh ta điều này, câu hỏi của bạn, vì nó đã chứa một ví dụ tái tạo tốt đẹp.
Ingo Karkat 22/03/2015

Tôi chỉ tìm thấy cú pháp Python thay thế của mình ở đâu đó; Tôi chỉ hiếm khi chỉnh sửa các tệp Python, vì vậy cho đến nay tôi vẫn chưa nghĩ nhiều.
Ingo Karkat 22/03/2015

cảm ơn @Ingo, tôi đã thay đổi các tệp cú pháp và nó không còn quá chậm. Tôi sợ các công cụ regex hơi vượt quá tầm hiểu biết của tôi, mặc dù vậy tôi sẽ gửi email cho nhà phát triển, tôi rất vui khi thực hiện bất kỳ thử nghiệm nào.
baxx 22/03/2015
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.