.emacs.d 디렉토리의 모든 것을 어떻게 바이트 컴파일합니까?


138

나는 Emacs를 확인하기로 결정했고 그것을 매우 좋아했습니다. 이제는 Emacs Starter Kit를 사용하고 있는데, Emacs Starter Kit 는 기본적으로 Emacs의 기본 설치에 대한 더 나은 기본값과 멋진 사용자 정의를 제공합니다.

나는 그것을 약간 사용자 정의하고 yasnippet , color-themes , unbound 및 기타 것들과 같은 것들을 추가했습니다. 모든 사용자 정의를 유지 하는 github 저장소를 설정하여 여러 위치에서 액세스 할 수 있거나 무언가 잘못되어 .emacs.d 디렉토리를 잃어 버릴 수 있습니다.

이 모든 것이 매우 좋지만 문제가 있습니다. Emacs를로드하는 데 1-2 초 정도 걸립니다. AFAIK Mx 바이트 컴파일 파일을 사용하여 개별 .el 파일을 .elc로 컴파일 할 수 있으며 작동합니다. 그러나 많은 .el 파일이 있으며 간단한 명령이나 무언가로 모든 파일을 컴파일하여 Emacs의 로딩 속도를 높이는 방법이 있는지 궁금합니다. 내 Emacs가 항상 열려있는 것은 아니며, 특히 Total Commander에서 편집 명령의 기본 편집기로 설정 한 후에 더 자주 열리고 닫힙니다 (예, 여기에서 Windows XP).

내 이맥스 버전은 22.3입니다. 그렇습니다. 사용자 정의없이 기본 Emacs 설치가 즉시 실행됩니다.

.el 또는 컴파일 된 .elc를로드 할 때 어떤 버전이 선호되는지 잘 모르겠습니다.

따라서 Emacs가 .emacs.d 디렉토리의 모든 것을 바이트 컴파일하도록하는 elisp 명령 또는 Emacs 명령 행 스위치가 있습니까?

답변:


208

C-u 0 M-x byte-recompile-directory

디렉토리와 아래의 모든 하위 디렉토리에서 모든 .el 파일을 컴파일합니다.

C-u 0부분은 .elc 파일이없는 모든 .el 파일에 대해 묻지 않도록하는 것입니다.


9
그런 다음 (각각 한 번 컴파일 된 후) C-u 0( C-0, BTW) 없이 동일한 명령을 사용하십시오 . 바이트 컴파일 버전보다 최신 인 소스 파일 만 바이트 컴파일합니다.
Drew

1
약간의 참고 사항 : 모든«.elc»파일을 모두 제거 할 때까지 작동하지 않았습니다. 방금«완료, 파일 0 개 컴파일, α 파일 건너 뛰기»와 같은 내용을 표시했습니다.
Hi-Angel

1
@ Hi-Angel 나는 같은 문제가 있습니다. 해결책을 찾았습니까?
zhanxw

@zhanxw yep. 불행히도이 명령은 변경되었거나«.elc»파일이없는 파일 만 컴파일합니다. 따라서 디렉토리의 모든 것을 다시 컴파일하려면 모든«.elc»파일을 삭제해야합니다.
Hi-Angel

2
대화식 명령은 불행히도이를 노출시키지 않지만, 함수를 직접 호출하면 선택적 인수 FORCE를 사용 하여 소스 파일보다 이전 버전이 아닌 경우에도 이미 연결된 ".elc"가있는 파일을 다시 컴파일 할 수 있습니다 .M-: (byte-recompile-directory "/the/directory/" 0 t)
jbm

44

emacs를 시작할 때마다 바이트 컴파일이 필요한 모든 것을 자동으로 바이트 컴파일하기 위해 파일 load-path맨 위에 변경 한 후 다음을 추가했습니다 .emacs.

(byte-recompile-directory (expand-file-name "~/.emacs.d") 0)

놀랍게도, 시작 시간이 많이 걸리지 않습니다 (무언가를 컴파일 해야하는 경우 제외).

emacs의 속도를 높이기 위해 먼저 profile-dotemacs.el을 사용하여 느린 부분을 식별 한 다음 autoloads 로 대체했습니다 .


자동로드 설명서가 이동되었습니다. 그와 profile-dotemacs.el 참조는이 페이지를 방문했을 때 필요한 것입니다.
Digicrat

24

--batch플래그를 사용 하여 명령 행에서 다시 컴파일 할 수 있습니다 .

모두 다시 컴파일하려면

emacs --batch --eval '(byte-recompile-directory "~/.emacs.d")'

또는 Makefile에서와 같이 단일 파일을 다시 컴파일하려면

emacs --batch --eval '(byte-compile-file "your-elisp-file.el")'


1
어떻게 사용해야합니까?
nacho4d

8
@ nacho4d -byte-recompile-directoryemacs -Q --batch -f batch-byte-compile *.el foo/*.el 처럼 재귀하지 않습니다 .
브라이언 번즈

3
예를 들어, 재 컴파일을 강제하기 위해 인수를 추가 할 수 있습니다. emacs --batch --eval '(byte-recompile-directory "~ / .emacs.d"0)'
Ibrahim

17

이것은 질문에서 약간 흔들리고 있지만 천천히로드하는 문제를 해결하기 위해 Emacs 23의 새로운 데몬 기능을 사용할 수 있습니다.

"지원 패키지가 많으면 emacs 시작이 약간 느려질 수 있습니다. 그러나 emacs 23은 emacs --daemon을 사용하여 백그라운드에서 emacs를 시작할 수 있습니다 (예 : 로그인 할 때). emacsclient로 새로운 emacs 창 (프레임)을 만들 수 있습니다. 물론, 이전 버전에서는 이미 emacs '서버'를 가질 수 있지만 백그라운드에서 시작할 수 있으면 훨씬 좋은 해결책이됩니다. "

에서 http://emacs-fu.blogspot.com/2009/07/emacs-23-is-very-near.html


나는 확실히 이것 하나를 확인합니다. 감사합니다!
Mikka

2
별명 emacs = 'emacsclient -nw -a ""-c'를 .bashrc (또는 쉘 버전)에 추가하면 먼저 실행중인 데몬 (있는 경우)에 연결을 시도합니다. 당신.
Frederick

2

사용하는 spacemacs의 경우 명령은 spacemacs/recompile-elpa입니다. 이 명령 byte-recompile-directory은 파일을 컴파일하지 않습니다.


2
다른 것들. ELPA / MELPA는 자체 아카이브 계층 구조에서 빌드 메소드를 정의했습니다. byte-recompile-directory는 모든 .el 파일을 사용자 정의 디렉토리에 컴파일하려고 시도합니다.
RichieHH
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.