มีกฎใดบ้างที่ผู้ใช้สามารถกำหนดได้ว่าต้องการการกำหนดค่าแพ็คเกจ: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
บล็อก