ตัวเลขจำนวนมากทำให้กลุ่มทำงานช้าลงหรือไม่?


18

ดูเหมือนว่าเป็นคำถามที่บ้าคลั่งจริงๆ แต่ฉันมีไฟล์ Python ที่มีตัวเลขอยู่ในนั้นยาวพันหลักและไฟล์นั้นดูเหมือนจะทำงานช้ามากฉันไม่แน่ใจว่ามีการประมวลผลบางอย่างเกิดขึ้นไหม ไม่รู้ตัว

ฉันกดแถวแล้วjก็หยุดสักประมาณ 1 วินาทีมันเจ็บปวดมาก!

ฉันมีสิ่งนี้ในไฟล์ Python เท่านั้น แต่จะไม่เกิดกับผู้อื่น

หลังจากลบหมายเลขไฟล์แล้วไฟล์จะทำงานตามปกติอีกครั้ง ...

นี่คือหมายเลข:

number=("""7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450""")

มันไม่ได้เป็นจำนวนจริง ๆ มันคือสตริง


2
ยืนยันที่นี่; .txtจะไม่เกิดขึ้นถ้าไฟล์เป็น รูปแบบไฮไลต์บางรูปแบบของ regexp ทำให้หลงทางฉันคิดว่า
Rmano

เนื่องจากนี่คือการเน้นไวยากรณ์ที่เกี่ยวข้องการแก้ปัญหาง่าย ๆ คือการตั้งค่าsynmaxcolเป็นจำนวนที่ จำกัด (เช่นความกว้างของเทอร์มินัลของคุณ)
สเลด

คำตอบ:


23

ฉันสามารถทำสิ่งนี้กับsyntax/python.vimเรือลำนั้นด้วย Vim 7.4.663

การใช้:syntimeสิ่งนี้ดูเหมือนจะเกิดจากกลุ่มไวยากรณ์ / รูปแบบต่อไปนี้:

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

คุณควรรายงานปัญหานี้ต่อผู้ดูแล (ชื่อและที่อยู่อีเมลของเขาอยู่ในส่วนหัวของสคริปต์)

บังเอิญผมเดิมไม่สามารถทำซ้ำเช่นนี้เพราะผมใช้สคริปต์ไวยากรณ์ทางเลือกจากที่นี่ การเปลี่ยนไปใช้สิ่งนั้น (หากเหมาะสมกับความต้องการของคุณ) ก็จะเป็นการแก้ปัญหาได้จริงเช่นกัน


แก้ไข:มองหาสาเหตุที่เป็นไปได้มากขึ้นดูเหมือนว่านี่เป็นเพราะประสิทธิภาพทางพยาธิวิทยาของเอ็นจิน regexp ที่ใช้ NFA ใหม่ ด้วย:set regexpengine=1ฉันไม่เห็นว่าการชะลอตัวครั้งใหญ่ ดังนั้นวิธีแก้ปัญหาหนึ่งที่เป็นไปได้ / การแก้ไขจะเปลี่ยนเป็นเอ็นจิ้นเก่าสำหรับการจับคู่ไวยากรณ์นั้น สิ่งนี้สามารถทำได้โดยการเพิ่ม\%#=1ไปที่รูปแบบ (cp. :help NFA)


ขอบคุณ @Ingo ฉันไม่เคยรายงานอะไรมาก่อน แต่ฉันดีใจที่ทำเช่นนั้น ฉันมีไฟล์ไวยากรณ์ในนักพัฒนาที่ด้านบนคือ/usr/share/vim/vim74/syntax Neil Schemenauer <nas@python.ca>ฉันขอถามคุณหน่อยได้ไหม; เหตุใดคุณจึงเปลี่ยนไฟล์ไวยากรณ์ดั้งเดิม ขอบคุณ
baxx

ใช่ถูกต้อง; เวอร์ชันล่าสุดมาจาก 2014 16 ก.ค. ดังนั้นจึงเป็นไปได้ว่ามันจะยังคงอยู่และคุณจะได้รับคำตอบจากผู้เขียน คุณสามารถชี้ให้เขาเห็นสิ่งนี้คำถามของคุณเนื่องจากมันมีตัวอย่างที่ทำซ้ำได้ดีอยู่แล้ว
Ingo Karkat

ฉันเพิ่งพบไวยากรณ์ Python ทางเลือกของฉันที่ไหนสักแห่ง; ฉันไม่ค่อยแก้ไขไฟล์ Python ดังนั้นฉันจึงไม่ได้คิดมากขนาดนั้น
Ingo Karkat

ขอบคุณ @Ingo ฉันได้เปลี่ยนไฟล์ไวยากรณ์และมันไม่ช้าอีกต่อไป ฉันกลัวว่าเครื่องมือ regex นั้นเกินความเข้าใจของฉันฉันจะส่งอีเมลไปที่ dev แต่ฉันยินดีที่จะทำการทดสอบใด ๆ
baxx
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.