답변:
사용자가 패키지 구성이 필요한지 여부를 확인 할 수있는 어떤 규칙이 있습니까
:init
또는:config
?
모든 설정 및 패키지에 적용되는 일반적인 규칙은 없습니다. 의 README 파일 을 읽으면 이러한 키워드의 의미에 익숙해 져야 합니다use-package
.
요약하면, :init
당신은 최고 수준의 구성 형태를 배치 것처럼 블록은 시작시 (일반 전화의 예를 외부로 실행 use-package
하여의를) user-init-file
. 이는 해당 패키지의로드 여부에 관계없이 항상 실행됨을 의미합니다.
반면에 :config
블록은 eval-after-load
메커니즘 을 통해 해당 패키지가로드 된 후 실행 됩니다.
따라서 적용 가능한 장기 실행 설정을에서 (으) :init
로 이동하여 시작 시간을 향상시킬 수 있습니다 :config
. 특정 패키지를로드 한 후에 만 정의 된 변수를 수정해야하는 경우 이와 유사하게 :config
블록 에 배치해야합니다 . 와 같은 일부 변수 gnus-home-directory
는 해당 패키지를로드하기 전에 설정해야하므로에 배치해야합니다 :init
. 언 바운드 상태에서도 후크를 수정할 수 있으므로 모든 적용 가능한 add-hook
/ remove-hook
호출을 :init
블록 에 넣는 것이 좋습니다. 이는 설정에 더 많은 모듈성을 제공합니다.
새 :custom
키워드를 사용하거나 쉬운 사용자 정의 인터페이스를 직접 사용 하여 특정 설정을 배치 할 위치를 파악하지 않아도되는 경우가 종종 있습니다.
일반적인 규칙이 있는지 확실하지 않습니다 ( " :init
실제 패키지를로드하기 전에 사전 :config
구성에 사용 하고 다른 구성에 사용").
그러나 :init
예를 들어 "this"패키지의 함수를 사용하기 위해 다른 모드 맵 키 바인딩을 추가하고 싶을 때 본인이 사용 합니다. 그리고 여전히 "this"패키지가 게으르게로드되기를 원합니다.
다음은 지연 로딩의 예입니다 dired-ranger
.
(use-package dired-ranger
:commands (dired-ranger-copy dired-ranger-paste dired-ranger-move)
:init
(add-hook 'dired-mode-hook
(lambda ()
(define-key dired-mode-map (kbd "M-w") 'dired-ranger-copy)
(define-key dired-mode-map (kbd "C-y") 'dired-ranger-paste)
(define-key dired-mode-map (kbd "C-c C-y") 'dired-ranger-move))))
추신 : 존재하지 아니하는 경우 :defer
, :commands
, :mode
등 다음, 패키지 로딩이 게으른 만드는 :init
하고 :config
(하지만 더 많거나 적은 동일해야합니다 :init
:) 이전에 평가됩니다)
:config
너무 늦었습니다. 게으른 로딩은 바인딩을 적용하지 않습니다. 그리고 :bind
와는 :map
실제로 바인딩하지 않습니다.
:config
너무 늦지 않았습니다-정확히 dired-mode-map
처음 정의 된 시점 입니다. 당신은 아마 잘못에 넣어있는 use-package
형태 dired-ranger
가 아닌 dired
경우, dired-mode-map
정의된다. 또한 왜 :bind
작동하지 않는지 설명 할 수 있습니다 . 기본적으로, 당신이 잘못하고 있거나 use-package
버그가 있습니다. 로컬 키 바인딩과 eval-after-load
자동로드 된 명령 / 키맵의 글로벌 키 바인딩을 혼동하지 마십시오 .
use-package-always-ensure
했고 패키지를 사용하려고 할 때 elpa에서 가져 오는 데 실패했습니다. 그러나 :ensure nil
거기에 문제 가 있으면 체인 패키지 로딩 dired
-> dired-ranger
using을 설정할 수 있습니다 :after
.
:bind
키워드를 사용 하거나:config
블록 에서 키 바인딩을 수정할 수 있습니다 .