Apakah sejumlah besar membuat vim berjalan lambat?


18

Ini sepertinya pertanyaan yang sangat aneh, tapi saya memiliki file Python yang memiliki angka di dalamnya yang panjangnya seribu digit dan file itu tampaknya berjalan sangat lambat, saya tidak yakin apakah ada semacam pemrosesan yang terjadi pada saya. Saya tidak tahu.

Saya menekan garis jdan ada jeda yang pasti ~ 1 detik itu sangat menyakitkan!

Saya hanya memiliki ini pada file Python, itu tidak terjadi pada orang lain.

Setelah menghapus nomor file tersebut berfungsi normal kembali ...

Ini nomornya:

number=("""7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450""")

Ini bahkan bukan angka, melainkan sebuah string.


2
Dikonfirmasi di sini; tidak terjadi jika file tersebut .txt. Beberapa sintaks menyoroti pola regexp tersesat, saya kira.
Rmano

Karena ini terkait dengan penyorotan sintaks, solusi sederhana adalah mengatur synmaxcolke beberapa nomor terbatas (seperti lebar terminal Anda).
Slade

Jawaban:


23

Saya dapat mereproduksi ini dengan syntax/python.vimyang dikirimkan dengan Vim 7.4.663.

Menggunakan :syntime, ini tampaknya disebabkan oleh sintaksis grup / pola berikut:

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

Anda harus melaporkan masalah ini ke pengelolanya (nama dan alamat emailnya ada di header skrip).

Kebetulan, saya awalnya tidak dapat mereproduksi ini, karena saya menggunakan skrip sintaksis alternatif dari sini . Beralih ke itu (jika sesuai dengan kebutuhan Anda), akan menjadi solusi yang layak juga.


Sunting: Melihat lebih jauh ke dalam penyebab yang mungkin, ini tampaknya karena kinerja patologis mesin regexp berbasis NFA baru. Dengan :set regexpengine=1, saya tidak melihat perlambatan besar itu. Jadi satu solusi / perbaikan yang mungkin adalah beralih ke mesin lama untuk kecocokan sintaksis itu; ini bisa dilakukan dengan menambahkan \%#=1pola (cp. :help NFA).


terima kasih @Ingo, saya belum pernah melaporkan apa pun tetapi saya senang melakukannya. Saya memiliki file sintaks /usr/share/vim/vim74/syntax, pengembang di atas adalah Neil Schemenauer <nas@python.ca>. Bisakah saya bertanya; apakah ini sebabnya Anda mengubah file sintaks awalnya? Terima kasih
baxx

Ya itu betul; versi terbaru adalah dari 2014 16 Juli, jadi kemungkinan masih dipertahankan, dan Anda akan mendapatkan jawaban dari penulis. Anda bisa mengarahkannya ke ini, pertanyaan Anda, karena sudah berisi contoh bagus yang bisa direproduksi.
Ingo Karkat

Saya baru saja menemukan sintaks Python alternatif saya entah di mana; Saya jarang mengedit file Python, jadi sejauh ini saya belum terlalu memikirkannya.
Ingo Karkat

terima kasih @Ingo, saya telah mengubah file sintaks dan itu tidak lagi begitu lambat. Saya khawatir mesin regex sedikit di luar pemahaman saya, saya akan mengirim email kepada dev, saya senang melakukan tes apa pun.
baxx
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.