숫자가 많으면 vim이 느리게 실행됩니까?


18

이것은 정말로 멍청한 질문처럼 보이지만, 그 안에 1000 자리 길이의 숫자가있는 파이썬 파일이 있고 그 파일이 매우 느리게 실행되는 것 같습니다. 모르겠다.

나는 라인업을 누르고 j~ 1 초의 명확한 일시 중지가있어 매우 고통 스럽습니다!

나는 이것을 파이썬 파일에만 가지고 있지만 다른 사람들에게는 발생하지 않습니다.

번호를 삭제하면 파일이 다시 정상적으로 작동합니다.

숫자는 다음과 같습니다.

number=("""7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450""")

그것은 실제로 숫자가 아니며 문자열입니다.


2
여기에서 확인되었습니다. 파일이 인 경우에는 발생하지 않습니다 .txt. 일부 구문은 정규 표현식 패턴이 잘못되었다고 강조합니다.
Rmano

이것은 구문 강조와 관련이 있기 때문에 간단한 해결 방법은 synmaxcol제한된 수 (예 : 터미널 너비)로 설정하는 것입니다.
Slade

답변:


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]\=\>

이 문제를 관리자에게보고해야합니다 (이름과 이메일 주소는 스크립트 헤더에 있음).

덧붙여서, 나는 here 에서 대체 구문 스크립트를 사용하기 때문에 원래 이것을 재현 할 수 없었 습니다 . 그것으로 전환하면 (요구 사항에 맞는 경우) 실행 가능한 해결 방법이 될 것입니다.


편집 : 아마도 원인을 더 자세히 살펴보면 새로운 NFA 기반 정규 표현식 엔진의 병리학 적 성능 때문인 것 같습니다. 와 함께 :set regexpengine=1, 나는 그 큰 둔화를 보지 못합니다. 따라서 가능한 해결 방법 / 수정 중 하나는 해당 구문 일치에 대해 이전 엔진으로 전환하는 것입니다. \%#=1패턴 앞에 추가 하면됩니다 (cp. :help NFA).


@Ingo 덕분에, 전에는 아무 것도보고 한 적이 없지만 기쁘다. 에 구문 파일이 /usr/share/vim/vim74/syntax있고 맨 위의 개발자는 Neil Schemenauer <nas@python.ca>입니다. 물어봐도 될까요? 이것이 구문 파일을 원래 변경 한 이유입니까? 감사합니다
baxx

그렇습니다. 최신 버전은 2014 년 7 월 16 일부터이므로 계속 유지 관리 될 가능성이 높으며 저자로부터 답변을 얻을 수 있습니다. 이미 재현 가능한 좋은 예가 포함되어 있으므로 질문을 지적 할 수 있습니다.
Ingo Karkat

어딘가에서 대체 파이썬 구문을 찾았습니다. 나는 파이썬 파일을 거의 편집하지 않으므로 지금까지 그다지 많은 생각을하지 않았습니다.
Ingo Karkat

@Ingo 덕분에 구문 파일을 변경했으며 더 이상 느리지 않습니다. 정규식 엔진이 내 이해력을 약간 뛰어 넘을 까봐 두려워합니다.하지만 개발자에게 이메일을 보내 겠지만 모든 테스트를 수행하게되어 기쁩니다.
baxx
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.