มีกฎใดบ้างที่ผู้ใช้สามารถกำหนดได้ว่าต้องการการกำหนดค่าแพ็คเกจ:initหรือ:configไม่?
มีกฎใดบ้างที่ผู้ใช้สามารถกำหนดได้ว่าต้องการการกำหนดค่าแพ็คเกจ:initหรือ:configไม่?
คำตอบ:
มีกฎใดบ้างที่ผู้ใช้สามารถกำหนดได้ว่าต้องการการกำหนดค่าแพ็คเกจ
:initหรือ:configไม่?
ไม่มีกฎทั่วไปที่ใช้กับการตั้งค่าและแพ็คเกจทั้งหมด คุณเพียงแค่ต้องทำความคุ้นเคยกับความหมายของคำเหล่านี้โดยการอ่านไฟล์ READMEuse-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))))
PS: ถ้าไม่มี: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และเมื่อฉันพยายามที่จะใช้แพคเกจ dired มันล้มเหลวในการดึงมันมาจาก elpa แต่ต้อง:ensure nilมีการแก้ปัญหาและฉันสามารถตั้งค่าการโหลดแพคเกจที่ถูกล่ามโซ่dired-> ใช้dired-ranger :after
:bindคำสำคัญสำหรับสิ่งนี้หรือปรับเปลี่ยนการเชื่อมโยงคีย์ใน:configบล็อก