Emacs를 더 빨리 시작하려면 어떻게해야합니까?
내가 사용하는 이맥스 절. 22 (콘솔 버전 중 하나를 원격으로 퍼티 또는 로컬로 Konsole을 ) 리눅스에 대한 내 기본 텍스트 편집기로. 시작할 때마다로드하는 데 시간이 걸립니다. 시간을 맞추지는 않았지만 거의 1 초 정도입니다. 파일 / 디렉토리 조작 및 컴파일을 위해 Bash 명령 줄을 사용하는 것이 더 편하기 때문에 Emacs를 많이 열고 닫는 경향이 있습니다 .
시작 시간을 단축하려면 어떻게해야합니까?
Adam Rosenfield의 솔루션 외에도 서버 모드에서 Emacs 를 사용하는 것이 좋습니다 . 당신은 추가 할 수 있습니다 (server-start)
귀하의 dotemacs에, 실행 emacsclient
대신 emacs
이맥스에서 열린 파일에 당신이 원하는 때마다. 이렇게하면 Emacs의 로딩 비용을 한 번만 지불하면 클라이언트가 즉시 나타납니다.
편집하다
맞습니다. v22는 새 프레임을 생성하지 않습니다. 트릭을 수행하는 셸 스크립트를 만듭니다.
#!/bin/bash
# Argument: filename to open in new Emacs frame
/usr/bin/emacsclient -e '(let ((default-directory "`pwd`/")) (select-frame (make-frame)) (find-file "'$1'"))'
다른 사람들은 gnuserve
및 사용을 다루었으며 emacsclient
emacs 내에서 컴파일하는 것이 좋습니다 (컴파일 오류로 이동할 수 있다는 것이 승리입니다).
그러나 구체적으로 .emacs 속도를 높이는 방법은 다음과 같습니다.
이 코드 조각을 사용하여 자동으로 수행 할 수있는 .emacs 파일을 바이트로 컴파일합니다.
자동로드 기능 으로 많은
(require 'package)
문을 대체 합니다. 이것은 실제로 필요할 때까지 lisp의 로딩을 지연시킵니다. 이 기술을 사용하여 시작 속도를 6 초 이상에서 1 초 미만으로 높일 수있었습니다. 모든 라이브러리가 제대로 표시되지 않기 때문에 약간의 작업이 필요합니다 .autoload
더 이상 사용하지 않는 코드 / 기능 제거.
--no-site-file
사이트 설치에서 불필요한 패키지를로드하지 않도록 옵션과 함께 emacs를 실행 해보십시오site-start.el
.정말로 진지하다면, 좋아하는 기능이 이미로드 된 상태로 자신 만의 emacs를 굴릴 수 있습니다. 이것은 물론
.emacs
바이너리의 일부이기 때문에 당신이 가지고있는 것을 변경하는 것이 더 복잡하다는 것을 의미합니다 . 사용 방법에 대한 정보를 보려면 링크를 따르십시오dump-emacs
.더 빠른 컴퓨터 및 / 또는 더 빠른 디스크를 구입하십시오.
.emacs가로드하는 항목을 확인하는 방법
이제 .emacs가로드하는 것을 어떻게 알 수 있습니까? 기능을 제거하거나 지연시키려는 목적이 있습니까? 다음 *Messages*
과 같은 행이 포함 된 버퍼를 확인하십시오 .
로드 중 /home/tjackson/.emacs.tjackson.el (소스) ... /home/tjackson/installed/emacs/lisp/loaddefs.el (소스)로드 중 ... 완료 /user/tjackson/.elisp/source/loaddefs.el (소스)로드 중 ... 완료 자동 되돌리기로드 중 ... 완료 /home/tjackson/.emacs.tjackson.el (소스)로드 중 ... 완료
눈치 채시면 Loading
문은 중첩 될 수 있습니다. 첫 번째 .emacs.tjackson.el
는로 끝나고 ...
마지막 줄은 .emacs.tjackson.el
로드가 ...done
. 다른 모든 파일은 내 .emacs.tjackson.el
파일 내부에서로드 됩니다. 다른 모든로드는 원자 적입니다.
참고 : 큰 .emacs가있는 경우 *Messages*
버퍼가 고정 된 양의 정보 만 유지하기 때문에 일부 메시지가 손실 될 수 있습니다 . 이 설정을 초기에 추가하여 .emacs
모든 메시지를 보관할 수 있습니다.
(setq message-log-max t)
참고 : 그것은 'load
네 번째 인수가 있다면 명령 메시지가 표시되지 않습니다 nomessage
nil이 아닌이 때문에 이러한 호출을 제거 (또는, 조언, 'load
그리고로 네 번째 인수를 강제로 nil
).
쉘을 사용할 때마다 Emacs를 닫지 마십시오. Ctrl-Z를 사용하여 Emacs를 배경 fg
으로 이동하고 Bash 의 명령을 사용하여 다시 전경으로 이동합니다.
몇 가지 팁 :
자동로드 사용
자동로드를 사용하면 라이브러리를 사용할 때까지로드하지 않아도됩니다. 예를 들면 :
(if (locate-library "ediff-trees") (autoload 'ediff-trees "ediff-trees" "Start an tree ediff" t))
.emacs 컴파일
버전 제어로 작업하고 .emacs가 .emacs.elc보다 새로운 경우 함정이 있지만 속도가 약간 증가합니다. 일반적인 트릭은 다음과 같습니다.
(defun autocompile nil "compile itself if ~/.emacs" (interactive) (require 'bytecomp) (let ((dotemacs (file-truename user-init-file))) (if (string= (buffer-file-name) (file-chase-links dotemacs)) (byte-compile-file dotemacs)))) (add-hook 'after-save-hook 'autocompile)
emacs 서버를 사랑하는 법을 배우십시오.
emacs를 서버로 실행하면 종료 할 필요가 없습니다. 그러나 여전히 emacs22를 사용하고 있습니다. emacs23은 multi-tty를 지원하므로 한 화면 세션에서 emacs를 실행 한 다음 다른 터미널에 새 창을 표시하는 것이 훨씬 쉬워집니다. emacs를 사용하여 메일 클라이언트 (mutt)의 메일을 편집하고 emacsclient는 이러한 종류의 빠른 편집에 환상적입니다.
다음 중 하나
M-x shell
M-x eshell
M-x term
M-x ansi-term
Emacs 내에서 명령 줄 요구 사항을 충족해야합니다.
M-!
(일명 M-x shell-command
)을 사용 하여 쉘로 떨어지지 않고 한 줄짜리를 실행할 수도 있습니다 .
.emacs
불필요한 패키지를로드하고 있는지 파일을 확인하십시오 . 패키지를로드하는 데 상당한 시간이 걸릴 수 있습니다. 예를 들어 php-mode
PHP 파일을 편집하는 경우 에만 패키지 를로드 할 수 있습니다 . 세부 사항은 확실하지 않지만 후크 프로 시저를 설치하여이를 수행 할 수 있습니다.
또한로드중인 모든 패키지가 컴파일되었는지 확인하십시오 ( .elc
파일). 다음 elisp
을 실행 하여 파일을 컴파일 할 수 있습니다.
emacs -batch -f batch-byte-compile thefile.el
컴파일 된 패키지는 컴파일되지 않은 패키지보다 훨씬 빠르게로드됩니다.
"파일 / 디렉토리 조작 및 컴파일을 위해 bash 명령 줄을 사용하는 것이 더 편하기 때문에 emacs를 많이 열고 닫는 경향이 있습니다."
vim과 같은 편집기가 사용되는 방식을 설명하고 있습니다. 안팎으로 쏴. Emacs는 일반적으로 열려 있으며 대부분은 "내부"에서 수행됩니다. hiena는 이미 여기서 올바른 접근 방식이 무엇인지 대답했습니다.
가장 빠른 방법은 .emacs 를 프로파일 링하는 것 입니다. .emacs의 특정 라인 4 개가로드 시간의 80 % 이상을 차지한다는 사실을 발견 한 후 5 분 만에로드 시간을 3 초에서 1 초로 줄였습니다.
(다른 사람들이 제안했듯이) .emacs
내의 로드 시간을 줄이는 데 도움이 된 한 가지는 eval-after-load 입니다. 다음 예에서 호출을 지연하는 것은에 로드 할 필요에서 당신을 저장 당신에 의 소재 기존 만들고 자동으로 적재가 더 효과적.autoload
sql-set-product
sql
.emacs
sql
(평가 후로드 "sql" '(예후 (sql-set-product 'mysql) (setq sql-mysql-options '("-C" "-t" "-f" "-n")) (setq sql-sqlite-program "sqlite3") ))
Of course, for some packages there will be a hook available that you can do the same thing, but sometimes there isn't, or else this way just proves easier to think about.
Emacs is designed to run "all the time" (or at least for long periods of time), thus starting and stopping Emacs several times during a day is not recommended.
I would suggest using screen. Screen is a terminal multiplexer, giving you an unlimited virtual terminals in one terminal.
After installing simply write "screen emacs" in your terminal. Emacs will start as usual, but pressing "c-a c" (that is press ctrl-a and then c) will open a new virtual terminal. You can get back to emacs by pressing "c-a c-a" (that's two times ctrl-a).
You can even detach from the running screen session, the key sequence is "c-a d".
Re-attach to the session by issuing "screen -R" and you will be back where you left. This enables you to start an emacs session at work, detach, go home, and re-attach from home.
I've been running Emacs like this for months in a row.
Here's the official web site: http://www.gnu.org/software/screen/ but try googling for screen tutorials and howtos
You can use benchmark-init to profile your Emacs startup. It will keep track of what modules are being loaded and how much time is spent on each. The results can be presented either in a tabulated form or as a tree. The tree makes it easier to track who loads what, which can be helpful when you load a package with a lot of dependencies, and the tabulated form helps you quickly find where most of the time is being spent.
Once you have these results try to figure out if all of the modules have to be loaded all the time or if you can perhaps load some of them on-demand. For instance, in my configuration I only load Emacs extensions that are specific to certain modes when that mode is actually activated since most of the time I only use a small subset of them in a session. eval-after-load and mode hooks will be your friends here.
By applying this method my Emacs starts in 3-4 seconds and I have close to 200 extensions installed. Most of the time is spent loading Helm, which I always load since it replaces find-file and other core functions that are always needed, and CEDET, since I use the latest version and it has to be loaded before Emacs tries to load the older built-in version.
One thing that others haven't mentioned is to include the elisp libraries you use as part of the dumped Emacs to move the library loading time from Emacs startup to Emacs build. It is not for the faint-hearted, but if you load several libraries in .emacs
it could win you a few seconds of startup time.
I had around 120sec start time. I was able to find the fix installing this:
https://github.com/dholm/benchmark-init-el put on top of your init.el
(let ((benchmark-init.el "~/.emacs.d/el-get/benchmark-init/benchmark-init.el"))
(when (file-exists-p benchmark-init.el)
(load benchmark-init.el)))
then once your emacs started, run:
M-x benchmark-init/show-durations-tree
On my side the problem was 127 secs in tramp-loaddefs
I fixed it by adding
127.0.0.1 host.does.not.exist
to /etc/hosts and that made my startup fast
see more here: https://github.com/emacs-helm/helm/issues/1045
another thing that maybe helpful to you: https://www.emacswiki.org/emacs/ProfileDotEmacs
This doesn't answer the question, but is kind of relevant
I don't know how to make it start faster, but there are a few things I could suggest:
for most things you do on the command line, you can do them in emacs:
- compile: M-x compile, then type the command you use
- my experience is only with C++, but with g++ you can press C-x ` to jump to lines that the compiler complains about
- run shell commands: M-!, dumps output into a buffer
- interactive shell: M-x shell
alternatively, you could run emacs like this:
emacs file.ext &
- which opens emacs in the background so you can still use the shell ( this works best with putty and X forwarding with something like Xming)
Try using the https://github.com/jwiegley/use-package macro to define your package loads and customizations. It handles deferred loading of packages for you, making it relatively easy to get good startup times even in the presence of large numbers of configured packages. I have almost 100 packages referenced in my .emacs, but my startup time is under 2 seconds on Linux, and 2.2s on the Mac.
I was trying to solve the same problem, when I came across this question here. I just wanted to add that the problem for me was not because of the load time of emacs lisp packages, but the fact that the host did not have a fully resolved hostname
To check your package load time do
M-x emacs-init-time
For me it was 0.3 seconds, and yet the load time was extremely high. After changing my hostname correctly, it fixed the problem.
To configure your fully resolved hostname edit /etc/hostname, and /etc/hostsfile with:
127.0.0.1 localhost localhost.localdomain
192.168.0.2 hostname hostname.domain
I would have to check my customization, but there is a package called gnuserve or emacsclient. It migrates a lot so you will have to google for it.
It runs one emacs session in the background. Any further sessions of emacs are essentially just new frames of that session. One advatage is quick startup times for your later sessions.
참고URL : https://stackoverflow.com/questions/778716/how-can-i-make-emacs-start-up-faster
'program tip' 카테고리의 다른 글
jQuery.proxy () 사용법 (0) | 2020.11.07 |
---|---|
특정 속성을 가진 모든 요소를 선택하는 방법은 무엇입니까? (0) | 2020.11.07 |
virtualenvwrapper 명령이 작동하지 않습니다. (0) | 2020.11.06 |
PHP에서 Microsoft 인코딩 따옴표를 바꾸는 방법 (0) | 2020.11.06 |
NSDictionary에 어떻게 저장할 수 있습니까? (0) | 2020.11.06 |