ฉันจะรวบรวมทุกสิ่งในไดเรกทอรี. emacs.d ของฉันได้อย่างไร


138

ฉันตัดสินใจที่จะดู Emacs และฉันชอบมันมาก ตอนนี้ฉันใช้Emacs Starter Kitซึ่งเป็นประเภทที่ให้ค่าเริ่มต้นที่ดีขึ้นและการปรับแต่งที่ดีในการติดตั้ง Emacs เริ่มต้น

ฉันปรับแต่งมันเล็กน้อยเพิ่มบางสิ่งเช่นyasnippet , ธีมสี , ไม่ได้ผูกไว้และอื่น ๆ ฉันได้ตั้งค่าที่เก็บ githubที่ฉันเก็บการปรับแต่งทั้งหมดเพื่อให้ฉันสามารถเข้าถึงได้จากหลาย ๆ ที่หรือในกรณีที่มีบางอย่างไม่ดีและฉันสูญเสียไดเรกทอรี. emacs.d ของฉัน

ทั้งหมดนี้ดีมาก แต่มีปัญหา: Emacs ใช้เวลาโหลดประมาณ 1-2 วินาที AFAIK ฉันสามารถรวบรวมไฟล์. el แต่ละไฟล์ด้วย Mx ไบต์คอมไพล์ไฟล์เป็น. elc และใช้งานได้ แต่มีไฟล์. el อยู่มากมายและฉันสงสัยว่ามีวิธีรวบรวมไฟล์เหล่านั้นทั้งหมดด้วยคำสั่งหรือสิ่งง่าย ๆ เพื่อเร่งความเร็วในการโหลด Emacs หรือไม่ Emacs ของฉันไม่ได้เปิดอยู่เสมอและฉันเปิดและปิดบ่อยๆโดยเฉพาะหลังจากที่ฉันตั้งค่าเป็นตัวแก้ไขค่าเริ่มต้นสำหรับคำสั่งแก้ไขใน Total Commander เพื่อให้คุ้นเคยกับมันเร็วขึ้น (ใช่แล้ว windows xp ที่นี่)

My Emacs เวอร์ชั่น 22.3 และใช่การติดตั้ง Emacs เริ่มต้นโดยไม่มีการปรับแต่งใด ๆ ก็จะเริ่มขึ้นทันที

ฉันไม่แน่ใจว่าต้องการเวอร์ชั่นใดเมื่อทำการโหลด. el หรือคอมไพล์. elc ทีละวิธี Oo

ดังนั้นจะมีคำสั่ง elisp หรือสวิตช์บรรทัดคำสั่ง Emacs เพื่อให้ Emacs รวบรวมข้อมูลทุกอย่างในไดเรกทอรี. emacs.d หรือไม่

คำตอบ:


208

C-u 0 M-x byte-recompile-directory

จะรวบรวมไฟล์. el ทั้งหมดในไดเรกทอรีและในทุกไดเรกทอรีย่อยด้านล่าง

C-u 0ส่วนหนึ่งคือการทำให้มันไม่ได้ถามเกี่ยวกับทุกไฟล์ .el ที่ไม่ได้มีคู่ .elc


9
และหลังจากนั้น (เมื่อมีการรวบรวมแต่ละครั้ง) เพียงแค่ใช้คำสั่งเดียวกันโดยไม่ต้องใช้C-u 0(aka C-0, BTW) ซึ่งจะคอมไพล์ด้วยไบต์ไฟล์เหล่านั้นที่ล่าสุดกว่าเวอร์ชั่นที่คอมไพล์ด้วยไบต์
ดึง

1
ข้อควรทราบเล็กน้อย: สำหรับฉันที่ไม่ทำงานจนกว่าฉันจะลบไฟล์«. elc »ทั้งหมด มันเพิ่งบอกบางสิ่งเช่น«เสร็จแล้ว, มี 0 ไฟล์ที่สร้างขึ้น, ไฟล์αถูกข้ามไป»
Hi-Angel

1
@ Hi-Angel ฉันมีปัญหาเดียวกัน คุณพบวิธีการแก้ปัญหาใด ๆ ?
zhanxw

@zhanxw yep น่าเสียดายที่คำสั่งรวบรวมเฉพาะไฟล์ที่มีการเปลี่ยนแปลงหรือไม่มีไฟล์« .elc » ดังนั้นในการคอมไพล์ทุกสิ่งในไดเรกทอรีก่อนอื่นคุณต้องลบไฟล์«. elc »ทั้งหมด
Hi-Angel

2
คำสั่งแบบโต้ตอบน่าเสียดายที่มันไม่ได้เปิดเผย แต่ถ้าคุณเรียกใช้ฟังก์ชั่นโดยตรงคุณสามารถใช้อาร์กิวเมนต์ที่เป็นตัวเลือกFORCEเพื่อคอมไพล์ไฟล์ที่มี ".elc" เชื่อมโยงอยู่แล้วแม้ว่าพวกเขาจะไม่เก่ากว่าไฟล์ต้นฉบับ:M-: (byte-recompile-directory "/the/directory/" 0 t)
jbm

44

หากต้องการรวบรวมข้อมูลทุกอย่างที่ต้องรวบรวมไบต์ทุกครั้งที่ฉันเริ่ม emacs ฉันจะใส่สิ่งต่อไปนี้หลังจากการเปลี่ยนแปลงของฉันload-pathที่ด้านบนของ.emacsไฟล์ของฉัน:

(byte-recompile-directory (expand-file-name "~/.emacs.d") 0)

น่าแปลกที่มันไม่ได้เพิ่มอะไรมากในเวลาเริ่มต้นของฉัน (ยกเว้นบางสิ่งที่จำเป็นต้องรวบรวม)

เพื่อเพิ่มความเร็วใน emacs ของฉันฉันแรกระบุส่วนที่ช้าใช้โปรไฟล์ dotemacs.elและแทนที่ด้วยแล้วautoloads


ย้ายเอกสารประกอบอัตโนมัติแล้ว นั่นและการอ้างอิง profile-dotemacs.el เป็นสิ่งที่ฉันต้องการเมื่อฉันเจอหน้านี้
Digicrat

24

คุณสามารถใช้การ--batchตั้งค่าสถานะเพื่อคอมไพล์ใหม่จากบรรทัดคำสั่ง

หากต้องการคอมไพล์ซ้ำทั้งหมดให้ทำ

emacs --batch --eval '(byte-recompile-directory "~/.emacs.d")'

หรือเพื่อคอมไพล์ไฟล์เดียวจาก Makefile

emacs --batch --eval '(byte-compile-file "your-elisp-file.el")'

5
ใช้batch-byte-compileแทน
npostavs

1
คุณควรจะใช้มันอย่างไร?
nacho4d

8
@ nacho4d emacs -Q --batch -f batch-byte-compile *.el foo/*.el- มันไม่ได้เก็บเงินเหมือนไดเรกทอรีไบต์ recompile-แม้ว่า
Brian Burns

3
คุณอาจต้องการเพิ่มอาร์กิวเมนต์เพื่อบังคับให้คอมไพล์ซ้ำเช่น emacs --batch --eval '(byte-recompile-directory "~ / .emacs.d" 0)'
Ibrahim

17

นี่เป็นการโยกย้ายคำถามไปเล็กน้อย แต่เพื่อแก้ปัญหาการโหลดช้าคุณสามารถใช้คุณลักษณะภูตใหม่ใน Emacs 23

"หากคุณมีแพ็คเกจสนับสนุนจำนวนมากการเริ่มต้น emacs อาจช้านิดหน่อยอย่างไรก็ตาม emacs 23 จะนำ emacs --daemon ซึ่งช่วยให้คุณเริ่มต้น emacs ในพื้นหลัง (เช่นเมื่อคุณลงชื่อเข้าใช้) คุณสามารถป๊อปได้ทันที หน้าต่างใหม่ของ emacs (เฟรม) พร้อม emacsclient แน่นอนคุณสามารถมี 'เซิร์ฟเวอร์' emacs ในรุ่นที่เก่ากว่าได้แล้ว แต่การเริ่มต้นในพื้นหลังทำให้โซลูชันนี้ดีกว่ามาก "

จากhttp://emacs-fu.blogspot.com/2009/07/emacs-23-is-very-near.html


ฉันจะตรวจสอบอันนี้อย่างแน่นอน ขอบคุณ!
Mikka

2
หากคุณเพิ่ม alias emacs = 'emacsclient -nw -a "" -c' ใน. bashrc ของคุณ (หรือเวอร์ชันของเชลล์) มันจะพยายามเชื่อมต่อกับ daemon ที่กำลังรันอยู่หากมีอยู่หากไม่ใช่จะเริ่มต้นหนึ่งและเชื่อมต่อ คุณ.
Frederick

2

สำหรับการใช้ spacemacs spacemacs/recompile-elpaของฉันคำสั่งคือ คำสั่งbyte-recompile-directoryไม่ได้รวบรวมไฟล์ใด ๆ


2
สิ่งที่แตกต่าง. ข้อมูล ELPA / MELPA ได้กำหนดวิธีการสร้างในลำดับชั้นการเก็บถาวรของตนเอง byte-recompile-directory พยายามรวบรวมไฟล์. el ทั้งหมดในไดเรกทอรีที่ผู้ใช้กำหนด
RichieHH
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.