.emacs를 변경 한 후 다시로드하려면 어떻게해야합니까?


375

Emacs를 다시 .emacs시작하지 않고 업데이트 한 모든 정의를 Emacs에 다시로드하려면 어떻게해야 합니까?


18
emacs는 종종 OS로 간주되지만 ... s / reboot / restart /?
윌리엄 퍼셀

6
나는 즉시 개발자 메이크업 감각이 나에게 많은 의미하지 않는다 너무 많이 응답의 개발자가 아니에요
Yazz.com

4
@MJB Stack Overflow의 목적은 가장 기본적인 질문에 대한 지식 저장소입니다. 이 질문은 스택 오버플로의 목적에 완벽하게 부합합니다. stackoverflow.com/faq
chollida를


10
하하 이제 5 년 후 제안 된 "Google 검색 우선"이 여기로 이어집니다! 좋은
JimLohse

답변:


350

load-file 명령을 사용할 수 있습니다 ( M-x load-file. return 키를 두 번 눌러 편집중인 현재 파일 인 기본 파일 이름을 사용하십시오).

포인트를 sexp의 끝으로 옮기고을 눌러 C-xC-e해당 sexp 만 실행할 수도 있습니다. 일반적으로 한두 줄만 변경하는 경우 전체 파일을 다시로드 할 필요는 없습니다.


22
이것이 항상 당신이 생각하는 것과 정확히 일치하는 것은 아닙니다. 내용이 플롭 된 변수가있는 경우 (즉, 부울을 반대로 설정하는 경우) 파일을로드하는 것과 동작이 동일하지 않습니다.
chollida

4
일반적으로 부작용은 파일로드 등 원하는 동작을 중단 할 수 있습니다.
vemv

이렇게하면 다음과 같은 메시지가 나타납니다. load-with-code-conversion : 변수의 기호 값이 void입니다 : n
Chris Marie

2
defun또는 뒤에 점을 이동하는 대신 defvar선언 본문 및 유형 안에 그대로 둘 수도 있습니다 C-M-x. 매우 편리합니다.
토마스

151

매우 편리하다는 것이 매우 이상합니다.

M-x eval-buffer

여기에 언급되지 않았습니다.

그것은 당신 .emacs이 pot 등원 이라면 버퍼의 모든 코드, 가장 빠른 방법을 즉시 평가합니다 .


3
누가 i .emacs등원인가?
mike

@ 마이크 : 내가 아닙니다. "a, b는 사실입니다"라는 의미는 "a, b는 참"이라는 의미입니다. 그러나 여러분의 의미를 알 수 있습니다. 나는 더 명확하게하기 위해 주어진다.
피터

7
@ mike : 언제 i 등하 지 .emacs않는 것이 합리적 입니까?
Zaz

나는 이것이 첫 제안이라고 생각했을 것이다.
Stryker

1
나는 그것이 좋은 스타일이라고 말하지는 않지만 일어날 수 있습니다. 예를 들어, 함수가 이미 정의 된 경우 (처음 시작시) 재정의하지 않도록 선택할 수 있습니다. init 파일을 평가할 때 정의가 변경되지 않을 수 있습니다.
Kaligule 2016 년

43

일반적으로 변경된 지역을 재평가 할 수 있습니다. 변경 한 ~ / .emacs 영역을 표시 한 다음을 사용하십시오 M-x eval-region RET. 두 번로드 한 후에도 제대로 작동하지 않는 .emacs 파일을 작성하기 쉽기 때문에 전체 파일을 다시 평가하는 것보다 안전합니다.


2
흥미 롭군 나는 dem 등하 지 않은 .emacs 파일의 아이디어를 고려하지 않았습니다. ELisp로 시작할 때주의해야 할 사항
Erik

2
나는 그것이 이맥스 파일을 찾을 드문 것 같아요 것 입니다 하나 개의 실행과 정확히 같은 상태의 결과로 두 실행의 강한 감각 적어도, 나무 등을. 최소한 두 번째로 실행될 때 중복 항목을 억제하지 않는 방식으로 다양한 목록에 추가하는 것이 일반적입니다.
데일 Hagglund

1
또 다른 생각 : 위에서 제안한 접근 방식을 사용하면 emacs 상태가 .emacs가 실제로하는 것과 다를 수 있습니다. 즉, 깨끗한 슬레이트에서 전체 .emacs 파일을 실행하지 않았으므로 실제로 원하는 것이 무엇인지 알 수 없습니다 .
데일 Hagglund

1
그렇듯이 .emacs를 dem 등식으로 쓸 수는 없습니까? 글로벌 상태는 불안정합니다.
Ehtesh Choudhury

39

현재 활성화 된 버퍼에서 .emacs 파일을 연 경우 :

MX 평가 버퍼

12
여기서주의해야 할 점은이 작업을 수행하면 재시작 방식과 동일한 상태 되지 않을 있다는 것 입니다. (예제 : .emacs에 "토글"영향이있는 경우).
luapyad


14

다음은 그렇게해야합니다 ...

M-x load-file

13

해결책

M-: (load user-init-file)


노트

  • Eval:프롬프트에 입력하십시오 (괄호 포함).
  • user-init-file~/.emacs기본적으로 값을 보유하는 변수 (구성 파일 경로를 가리킴)
  • (load)더 짧고, 오래되고, 비대화 형 버전입니다 (load-file). emacs 명령이 아니고 M-x단순한 elisp 함수입니다.

결론

M-: > M-x


M- :> Ctrl Alt x는 무엇입니까? 논리에 따라 M- : <CMx init 파일에서 한 줄만 변경하면 어떻게 될까요? 아마 == 일 것입니다
Robert Houghton

12

다른 사람들은 이미 언급 한대로 귀하의 질문에 대답했지만 일반적으로 방금 작성한 줄을 실행하고 싶습니다. 그것을 위해, CtrlAltxlisp에서 잘 작동합니다.


3
참고 eval-lastsexp로,C-x C-e
데릭 Slager

를 사용하면 C-M-x"리스프의 끝"에있을 필요는 없습니다. C-x C-e아마도 생각하고 있습니까? 좋은 C-M-x점은 포인트가 함수 / 변수 선언의 중간에 있더라도 호출 할 수 있다는 것입니다.
토마스

Cx Ce 만 사용했을 때 lisp가 끝나는 습관이 들었을 것입니다. 캐치 주셔서 감사합니다!
Bahbar

9

처음에는이 작업을 수행하지 않는 것이 좋습니다. 대신, 새로운 emacs 세션을 시작하고 변경 사항이 올바르게 작동하는지 테스트하십시오. 이 방법을 사용하는 이유는 작동하지 않는 .emacs 파일이있는 상태에서로드하지 못하거나 완전히로드되지 않는 상태를 유지하기 위해서입니다. 원래 세션에서 모든 편집 작업을 수행하고 새 세션에서 모든 테스트를 수행하는 경우 항상 문제가되는 코드에 주석을 달 수있는 신뢰할만한 것이 있습니다.

변경 사항에 만족하면 다른 답변 중 하나를 사용하여 다시로드하십시오. 개인적으로 선호하는 것은 eval추가 / 변경 한 섹션에만 해당되며, 추가 / 변경된 코드 영역을 강조 표시하고을 호출하기 만하면 M-x eval-region됩니다. 그렇게하면 luapyad가 지적한대로 평가되는 코드가 최소화되어 의도하지 않은 부작용이 최소화됩니다.


9

키보드 단축키:

(defun reload-init-file ()
  (interactive)
  (load-file user-init-file))

(global-set-key (kbd "C-c C-l") 'reload-init-file)    ; Reload .emacs file

훌륭한! 이것은 매우 좋다!
PinkCollins

7
C-x C-e ;; current line
M-x eval-region ;; region
M-x eval-buffer ;; whole buffer
M-x load-file ~/.emacs.d/init.el

4

현재 우분투 15.04에 있습니다. 나는 이것에 대한 열쇠를 정의하고 싶다.
[M-insert]는 키보드에서 alt-insert로 변환됩니다.
이것을 .emacs 파일에 넣으십시오.

(global-set-key [M-insert] '(lambda() (interactive) (load-file "~/.emacs")))

3

init 파일에서 정의하고 Mx reload-user-init-file로 호출 하십시오.

(defun reload-user-init-file()
  (interactive)
  (load-file user-init-file))

2

M-x eval-buffer작동 하지만 토글 및 기타 유사한 문제가 발생할 수 있습니다. 더 나은 접근 방식은 .emacs의 새로운 내용을 표시하거나 강조 표시하는 것 (또는 엉망인 경우에는 스크래치 버퍼)을 수행하는 것 M-x eval-region입니다. 도움이 되었기를 바랍니다.


2

다음은 구성을 빠르게 테스트하는 빠르고 쉬운 방법입니다. C-x C-e특정 lisp의 끝에서 특정 기능을 개별적으로 실행할 수도 있습니다 .

Cx Ce는 대화식으로 컴파일 된 Lisp 함수 인 eval-last-sexp (글로벌 맵에 있음) 명령을 실행합니다.

Cx Ce에 바인딩됩니다.

(평가판 마지막 평가 EVAL-LAST-SEXP-ARG-INTERNAL)

포인트 이전의 sexp를 평가하십시오. 에코 영역에 값을 인쇄합니다. 접두사 인수를 사용하여 대화식으로 출력을 현재 버퍼에 인쇄합니다.

일반적으로이 함수는 변수 'eval-expression-print-length'및 'eval-expression-print-level'의 값에 따라 긴 출력을 자릅니다. 그러나 접두어 인수가 0이면 그러한 잘림이 없습니다. 이러한 접두사 인수는 정수가 몇 가지 추가 형식 (8 진수, 16 진수 및 문자)으로 인쇄되도록합니다.

'eval-expression-debug-on-error'가 기본값이 아닌 0이 아닌 경우,이 명령은 모든 오류가 디버거에 들어가도록 정렬합니다.


2

Mx eval-buffer 또는 Mx load-file 과 같은 명령 외에도 명령 행에서 새로운 emacs를 다시 시작할 수 있습니다.

emacs -q --load "init.el"

사용 예 stackoverflow.com/questions/44959535/company-backends-in-gnu-emacs/


질문은 Emacs를 다시 시작하지 않고이 작업을 수행하는 방법을 묻습니다. 기술적 으로 질문에 대답하는 동안 새 사본을 시작해도 질문의 정신에 맞지 않는 것 같습니다. 😄
chwarr

0

이맥스에 대한 키 바인딩을 설정할 수 있습니다

;; reload emacs configuration
(defun reload-init-file ()
  (interactive)
  (load-file "~/.emacs"))

(global-set-key (kbd "C-c r") 'reload-init-file) 

이것이 도움이되기를 바랍니다!


-2

Emacs 내부에 쉘을 연 경우 다음을 수행 할 수도 있습니다.

. ~/.emacs

몇 가지 키 스트로크를 저장할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.