数値が大きいとvimの実行が遅くなりますか?


18

これは本当に難しい質問のように思えますが、私はPythonファイルに1000桁の長さの数字があり、そのファイルの実行は非常に遅いようです。何らかの処理が行われているかどうかはわかりません知らない。

ラインナップを押すjと、1秒以下の明確な一時停止があり、それは非常に痛いです!

私はこれをPythonファイルにしか持っていませんが、他の人には起こりません。

番号を削除した後、ファイルは再び正常に動作します...

番号は次のとおりです。

number=("""7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450""")

それは実際には数字ではなく、文字列です。


2
ここで確認。ファイルがの場合は発生しません.txt。いくつかの構文は、正規表現パターンが誤っていることを強調しています。
Rmano

これは構文の強調表示に関連しているため、単純な回避策はsynmaxcol、限られた数(端末の幅など)に設定することです。
スレイド

回答:


23

syntax/python.vimVim 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]\=\>

この問題をメンテナーに報告する必要があります(彼の名前とメールアドレスはスクリプトのヘッダーにあります)。

ちなみに、ここから別の構文スクリプトを使用しているため、元々これを再現できませんでし。それに切り替える(要件に適合する場合)ことも実行可能な回避策です。


編集:おそらく原因をさらに調べてみると、これは新しいNFAベースの正規表現エンジンの病理学的パフォーマンスによるものと思われます。では:set regexpengine=1、そのような大きな減速は見られません。したがって、考えられる回避策/修正の1つは、その構文一致のために古いエンジンに切り替えることです。これは\%#=1、パターンの先頭に追加することで実行できます(cp。:help NFA)。


@Ingoに感謝します。以前に何も報告していませんが、喜んで報告します。私は構文ファイルを持っています/usr/share/vim/vim74/syntax、一番上の開発者はNeil Schemenauer <nas@python.ca>です。聞いてもいいですか; これが、元々構文ファイルを変更した理由ですか?おかげで
baxx

はい、そうです; 最新バージョンは2014年7月16日のものであるため、引き続きメンテナンスされている可能性があり、作成者から回答が得られます。彼はこれをあなたの質問に向けることができます。それはすでに素晴らしい再現可能な例を含んでいるからです。
インゴカルカット

どういうわけか、代わりのPython構文をどこかで見つけました。Pythonファイルを編集することはめったにないので、これまであまり考えていません。
インゴカルカット

@Ingoに感謝します。構文ファイルを変更したので、それほど遅くなりません。私は正規表現エンジンが私の理解を少し超えているのではないかと心配しています。しかし、開発者にメールを送ります。テストを実行できてうれしいです。
baxx
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.