जवाबों:
क्या कोई नियम है जिसके द्वारा उपयोगकर्ता यह निर्धारित कर सकता है कि पैकेज कॉन्फ़िगरेशन की आवश्यकता है
: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
जब, उदाहरण के लिए, मैं "इस" पैकेज से कार्यों का उपयोग करने के लिए कुछ अन्य मोड मैप कीबाइंडिंग जोड़ना चाहता हूं। और अभी भी "यह" पैकेज आलसी लोड होना चाहते हैं।
यहाँ आलसी लोडिंग का उदाहरण है 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
और जब मैं उपयोग करने के लिए-पैकेज की कोशिश करता हूं तो यह एलपा से लाने में विफल रहता है। लेकिन :ensure nil
वहाँ होने से समस्या हल हो जाती है और मैं जंजीर पैकेज लोडिंग dired
-> dired-ranger
का उपयोग कर सेट कर सकता हूं :after
।
:bind
कीवर्ड का उपयोग कर सकते हैं या:config
ब्लॉक में कुंजी बाइंडिंग को संशोधित कर सकते हैं ।