의견에서 이미 대답했듯이, Emacs는 긴 줄을 다시 표시하는 데 매우 느려지는 것은 잘 알려진 문제 입니다. 그것을 고치는 것은 매우 좋을 것이지만, 올바르게 뽑히려면 많은 생각이 필요합니다. 이 문서 의 섹션 6.3에 따라 어떻게 수행 할 수 있는지에 대한 아이디어가 있습니다
(기본적으로 현재 버퍼에 비주얼 라인 정보를 저장하고 공백 삽입, 속성 표시, 창 변경 등으로 업데이트 한 다음 해당 정보를 사용하십시오). 스캔을 항상 피하는 재표시 코드)) 그러나 C 내부 요소를 잘 이해하지 못합니다.
그래도 해결 방법이 있습니다. 가장 분명한 것은 디스플레이 관련 매개 변수를 조정하는 것입니다 (그래픽 Emacs 인스턴스에서 시각적 줄 잘림 활성화, 그래픽이 아닌 Emacs를 사용하여 자동으로 수행, Bidi 기능 비활성화 등) 및 파일 내용 전처리 덜 분명한 것은 파일을 실제로 사후 처리하는 것입니다. 실제로 줄을 잘라내거나 줄을 실제보다 짧게 표시하는 텍스트 속성을 추가하는 것입니다. 이것을 더 흥미로운 답변으로 바꾸기 위해 이전 옵션에 대한 추악한 해킹을 제시합니다.이 옵션은 comint
파생 모드 에서만 작동 합니다.
(defun my-comint-shorten-long-lines (text)
(let* ((regexp "^\\(.\\{80\\}\\).*?$")
(shortened-text (replace-regexp-in-string regexp "\\1" text)))
(if (string= shortened-text text)
text
(propertize shortened-text 'help-echo text))))
(add-hook 'comint-preoutput-filter-functions 'my-comint-shorten-long-lines)
이것은 my-comint-shorten-long-lines
많은 행으로 구성 될 수있는 문자열을 취하고 정규 표현식의 힘을 사용하여 80 자 이상의 길이로 줄을 바꾸면 단축 된 버전으로 원래 텍스트를 표시하는 함수를 정의 합니다. 후크 인으로 사용되면
표시되기 전에 comint-preoutput-filter-functions
모든 comint
출력 을 필터링합니다 .
그러나 이러한 핵의 표현은 상당히 심각한 약점을 가지고 있습니다. 기본 글꼴 화가 진행되는 모드 (예 :) M-x ielm
에서는 문자열의 일부인 줄을 행복하게 잘라 내고 다음 인용 부호까지 문자열로 모든 것을 글꼴 화합니다! 그것은 우리가 원하는 것이 아니며 좀 더 정규 표현식으로 고칠 수 있습니다 (그러나 아마도 파이썬과 같은 언어의 REPL 내부에서 깨질 것입니다). 우리가 그것을하는 동안, 단축 출력도 강조하자 :
(defun my-comint-shorten-long-lines (text)
(let* ((regexp "^\\(.\\{80\\}\\).*?\\(\"?\\)$")
(shortened-text (replace-regexp-in-string regexp "\\1\\2" text)))
(if (string= shortened-text text)
text
(propertize shortened-text 'font-lock-face 'shadow 'help-echo text))))
(add-hook 'comint-preoutput-filter-functions 'my-comint-shorten-long-lines)
조금 나아지지만 여전히 추악합니다. find /
in 과 같은 결과물을 가리키면 M-x shell
매력적이지 않습니다 (우리는 이상적으로 단축되지 않은 줄만을 표시하고 싶을 것입니다). 문자열 감지는 기껏해야 초보적이며 모든 것을 글꼴 화하는 대신 줄임표로 잘릴 수 있습니다. 게다가, 들어오는 텍스트가 배치로 바뀌지 않는다는 보장조차 없습니다. 이 모든 것은 임시 버퍼에서 처리 단계를 수행하기 위해 비명을 지르지 만 독자는 운동으로 (또는 잠재적 인 블로그 게시물로 저자는) 남겨 둘 것입니다.