답변:
패키지가 연기되는 경우에는 다릅니다. 즉, 필요할 때까지로드되지 않습니다. 이 경우 :init
emacs 파일을 처음 읽을 :config
때 실행 되지만 패키지가 실제로로드 될 때 실행됩니다.
귀하의 예에서 mode
묵시적으로 사용 하면 패키지로드가 지연됩니다. html 파일을 처음 방문 할 때 패키지가로드되도록 구성했습니다.
:demand
시작할 때 패키지가 항상로드되도록하는 데 사용할 수 있지만 여기서 할 일은 후크를 넣는 것입니다 :init
.
docstring에서 :
:init Code to run when `use-package' form evals.
이것을 user-init 파일에 넣었으므로 기본적으로 시작시 실행됩니다.
:config Runs if and when package loads.
따라서 패키지가 실제로로드 될 때까지 실행하지 마십시오.
:defer Defer loading of package -- automatic if :commands, :bind, :bind*, :mode or :interpreter are used.
패키지를 자동으로 연기하는 항목 목록을 참고하십시오. 기본적 use-package
으로이 패키지가 필요한 조건을 알려 주면 해당 조건이 발생할 때까지 패키지를로드하지 않는다고 가정합니다.
:demand Prevent deferred loading in all cases.
지정한 다른 옵션에 관계없이 시작시 패키지가로드되어 있는지 확인하십시오.
최신 정보
최근 의견을 바탕으로 이것을 다시 방문하면 ... 위에서 말한 내용이 모두 사실이지만 질문에 올바르게 대답하지 못한다고 생각합니다. 여기서 근본적인 문제는 실제로 html-mode
패키지가 아니라 패키지에 의해 정의 된 모드 sgml-mode
입니다. 이것은 나에게 예상대로 작동합니다.
(use-package sgml-mode
:mode ("\\.html\\'" . html-mode)
:config (add-hook 'html-mode-hook 'turn-off-auto-fill))
원래 예제에서 :config
이름이 패키지 html-mode
가로드되지 않기 때문에식이 평가 되지 않습니다. :init
패키지가로드되는지 여부에 관계없이 init 코드가 항상 평가되므로 동일한 표현식을 작동 하도록 이동하십시오 .
:idle
꽤 광범위하게 사용 하고 ": idle is removed"의 영향을 조사하지 않았습니다.
auto-fill
때 구성 코드가 실행되지 않은 이유를 이해 하지 못합니다. 나는 같은 문제를 가지고있다.
html-mode
는 패키지가 아니라고 생각합니다 . 적어도 내 현재 Emacs 버전 html-mode
에서 패키지에 정의되어 sgml-mode
있습니다. 따라서 use-package
명명 html-mode
된 패키지 가로드 될 때 무언가를하도록 지시하면 해당 패키지 가로드되지 않기 때문에 해당 코드가 실행되지 않습니다. 에 html 모드 설정을 넣어야합니다 (use-package sgml-mode ....)
.
org-mode
아닙니다 html-mode
. 비슷한 문제는 패키지가 호출 org-mode
되지만 ELPA 패키지가 호출 된다는 것입니다 org
. 어쩌면 그것은 혼란 스럽습니까?
이 예제를 통해 :init
와 의 차이점을 이해하기가 훨씬 쉬워졌습니다 :config
. ace-window
패키지 의 예를 보자 (그러나 이것은 모든 패키지 일 수 있음). 이것을 init.el
파일에 넣으십시오 .
(use-package ace-window
:ensure t
:defer t
:config
(progn
(message "ace window: hello world")))
이제 이맥스를 열고 *Messages*
버퍼에서 hello world
메시지 가 있는지 확인하십시오. 패키지가 지연되어 찾을 수 없습니다. 이제에서 config
로 변경하십시오 init
.
(use-package ace-window
:ensure t
:defer t
:init
(progn
(message "ace window: hello world")))
이제 emacs를 닫았다가 다시 열고 *Messages*
버퍼를 검사하십시오 . ace window: hello world
언제 어떤 코드를 제공하든 코드가 실행되므로 메시지 :init
가 표시됩니다. 이 config
경우 해당 패키지가로드 될 때만 실행됩니다.
:init
와 키워드의 차이점은 무엇 :preface
입니까?
:preface
문제의 패키지가 비활성화 된 경우에도 실행 되지만 :init
패키지가 활성화 된 경우에만 실행됩니다.