답변:
패키지가 연기되는 경우에는 다릅니다. 즉, 필요할 때까지로드되지 않습니다. 이 경우 :initemacs 파일을 처음 읽을 :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패키지가 활성화 된 경우에만 실행됩니다.