मैं अपनी .emacs.d डायरेक्टरी में सब कुछ बाइट कैसे करूँ?


138

मैंने Emacs को देखने का फैसला किया है, और मुझे यह बहुत पसंद आया। अब, मैं एमएसीएस स्टार्टर किट का उपयोग कर रहा हूं , जो एमएसीएस की डिफ़ॉल्ट स्थापना के लिए बेहतर चूक और कुछ अच्छे अनुकूलन प्रदान करता है।

मैंने इसे थोड़ा अनुकूलित किया है, यसनीपेट , कलर-थीम , अनबाउंड और अन्य सामान जैसे कुछ सामान जोड़े हैं । मैंने एक github रिपॉजिटरी स्थापित की है जहाँ मैं सभी अनुकूलन रखता हूँ ताकि मैं उन्हें कई स्थानों से एक्सेस कर सकूँ या यदि कुछ खराब हो जाए और मैं अपनी .emacs.d निर्देशिका खो दूं।

यह सब बहुत अच्छा है, लेकिन एक समस्या है: Emacs को लोड होने में लगभग 1-2 सेकंड लगते हैं। AFAIK मैं व्यक्तिगत .el फ़ाइलों को Mx बाइट-संकलित-फ़ाइल .elc के साथ संकलित कर सकता हूं, और यह काम करता है। लेकिन बहुत सारी .el फाइलें होती हैं, और मुझे आश्चर्य होता है कि क्या Emacs की लोडिंग को तेज करने के लिए एक साधारण कमांड या कुछ के साथ उन सभी को संकलित करने का कोई तरीका है। मेरे Emacs हमेशा खुले नहीं होते हैं, और मैं इसे बहुत बार खोलता और बंद करता हूं, खासकर जब मैंने इसे कुल कमांडर में एडिट कमांड के लिए एक डिफ़ॉल्ट संपादक के रूप में सेट किया है ताकि इसे तेजी से इस्तेमाल किया जा सके (हाँ, विंडोज़ xp यहाँ)।

मेरा Emacs संस्करण 22.3 है। और हां, बिना किसी कस्टमाइज़ेशन के डिफ़ॉल्ट एमएसीएस इंस्टॉलेशन तुरंत खत्म हो जाता है।

मुझे यकीन नहीं है कि लोड करते समय कौन सा संस्करण पसंद किया जाता है। O या संकलित। Oo वैसे एक

तो, वहाँ एक elisp कमांड या Emacs कमांड लाइन स्विच है। Emacs को बाइट-सब कुछ .emacs.t निर्देशिका में संकलित करने के लिए?

जवाबों:


208

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

निर्देशिका में और नीचे सभी उपनिर्देशिकाओं में सभी .el फ़ाइलों को संकलित करेगा।

इसका C-u 0हिस्सा यह है कि हर .el फाइल के बारे में न पूछा जाए, जिसमें एक .elc समकक्ष न हो।


9
और उसके बाद (एक बार प्रत्येक को एक बार संकलित किया गया है), बस C-u 0(उर्फ C-0, बीटीडब्ल्यू) के बिना एक ही कमांड का उपयोग करें । यह केवल उन स्रोत फ़ाइलों को बाइट-संकलित करेगा जो उनके बाइट-संकलित संस्करणों की तुलना में अधिक हाल के हैं।
ड्रू

1
एक छोटा सा नोट: मेरे लिए जो तब तक काम नहीं करता था जब तक मैं एक सभी «.elc» फाइलों को हटा नहीं देता। यह सिर्फ «डन, 0 फाइलें comiled, α फ़ाइलों को छोड़» जैसे कुछ बताया।
हाय-एंजेल

1
@ हाय-एंजेल मुझे भी यही समस्या है। क्या आपको कोई समाधान मिला है?
zhanxw

@ ज़नक्सवप यप। दुर्भाग्य से कमांड केवल उन फाइलों को संकलित करता है जो या तो बदल गई हैं, या जिनके पास कोई भी नहीं है। तो एक निर्देशिका में सब कुछ recompile करने के लिए सबसे पहले आपको सभी «.elc» फ़ाइलों को हटाना होगा।
हाय-एंजेल

2
संवादात्मक आदेश दुर्भाग्य से इसे उजागर नहीं करता है, लेकिन अगर आप सीधे फ़ंक्शन को कॉल करते हैं, तो आप वैकल्पिक तर्क FORCEका उपयोग उन फ़ाइलों को फिर से शुरू करने के लिए कर सकते हैं, जिनके पास पहले से ही संबंधित ".elc" है, भले ही वे स्रोत फ़ाइल से पुराने न हों:M-: (byte-recompile-directory "/the/directory/" 0 t)
jbm

44

स्वचालित रूप से बाइट को संकलित करने के लिए हर उस चीज़ को संकलित करना होगा जो मुझे हर बार ईमैक्स शुरू करने के लिए चाहिए, मैंने load-pathअपनी .emacsफ़ाइल के शीर्ष पर अपने परिवर्तनों के बाद निम्नलिखित डाला :

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

हैरानी की बात है, यह मेरे स्टार्टअप समय में बहुत कुछ नहीं जोड़ता है (जब तक कि कुछ संकलित करने की आवश्यकता नहीं है)।

मेरी Emacs में तेजी लाने के लिए, मैं पहली बार का उपयोग कर धीमी गति से भागों की पहचान की प्रोफाइल-dotemacs.el और फिर उन्हें साथ प्रतिस्थापित autoloads


ऑटोलॉड्स प्रलेखन स्थानांतरित हो गया है। जब मैं इस पृष्ठ पर आया हूं, तो प्रोफ़ाइल-dotemacs.el संदर्भ बिल्कुल वही है जिसकी मुझे आवश्यकता थी।
दिगिरात

24

आप --batchकमांड लाइन से फिर से इकट्ठा करने के लिए ध्वज का उपयोग कर सकते हैं ।

सभी को फिर से जोड़ने के लिए, करें

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

या मेकफाइल से किसी एकल फ़ाइल को फिर से जोड़ने के लिए,

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

5
उपयोग बैच-बाइट-संकलन के बजाय।
npostavs

1
क्या आपको इसका उपयोग कैसे करना चाहिए?
nacho4d

8
@ nacho4d emacs -Q --batch -f batch-byte-compile *.el foo/*.el- यह बाइट- पुनर्नवीनीकरण -निर्देशिका की तरह पुनरावृत्ति नहीं करता है।
ब्रायन बर्न्स

3
आप शायद पुनर्मूल्यांकन के लिए बाध्य करने के लिए एक तर्क जोड़ना चाहते हैं, उदाहरण के लिए। emacs --batch --eval '(बाइट-रीकॉम्पिल-डायरेक्टरी "~ / .emacs.d" 0)'
इब्राहिम

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


मैं निश्चित रूप से यह एक बाहर की जाँच करने वाला। धन्यवाद!
मिकका

2
यदि आप .bashrc (या अपने शेल के संस्करण) में अन्य उपनाम = 'emacsclient -nw -a "-c' जोड़ते हैं, तो यह पहले एक चल रहे डेमॉन से कनेक्ट करने का प्रयास करेगा यदि एक है, अगर यह एक शुरू नहीं होगा और कनेक्ट करेगा आप।
फ्रेडरिक

2

मेरे स्पेसमेक्स का उपयोग करने के लिए, कमांड है spacemacs/recompile-elpa। कमांड byte-recompile-directoryकिसी भी फाइल को संकलित नहीं करता है।


2
अलग अलग बातें। ELPA / MELPA सामान ने अपने स्वयं के संग्रह पदानुक्रम में निर्माण विधियों को परिभाषित किया है। बाइट- recompile- निर्देशिका उपयोगकर्ता परिभाषित निर्देशिका में सभी .el फ़ाइलों को संकलित करने का प्रयास करता है।
रिची एचएच
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.