इसे बदलने के बाद मैं .emacs को कैसे पुनः लोड कर सकता हूं?


375

मैं Emacs को पुनः .emacsआरंभ किए बिना अपनी सभी परिभाषाओं को पुनः लोड करने के लिए Emacs कैसे प्राप्त कर सकता हूं ?


18
मुझे पता है कि एमएसीएस को अक्सर ओएस माना जाता है, लेकिन ... एस / रिबूट / पुनरारंभ /?
विलियम पर्ससेल

6
मैं एक डेवलपर नहीं हूं, इसलिए बहुत से जवाब जो डेवलपर्स के लिए तुरंत समझ में
आते हैं,

4
@ एमजेबी स्टैक ओवरफ्लो का उद्देश्य प्रश्नों के सबसे बुनियादी के लिए एक ज्ञान भंडार होना है। यह सवाल स्टैक ओवरफ्लो के उद्देश्य के साथ पूरी तरह से फिट बैठता है। कृपया
chollida


10
haha अब पाँच साल बाद सुझाव दिया "Google खोज पहले" यहाँ जाता है! अच्छा
जिमलोह

जवाबों:


350

आप कमांड लोड-फ़ाइल का उपयोग कर सकते हैं ( M-x load-fileफिर, डिफ़ॉल्ट फ़ाइल नाम को स्वीकार करने के लिए दो बार प्रेस करें, जो वर्तमान फ़ाइल संपादित की जा रही है)।

आप किसी भी सेक्सप के अंत में बिंदु को स्थानांतरित कर सकते हैं और C-xC-eकेवल उस सेक्सप को निष्पादित करने के लिए दबा सकते हैं। यदि आप सिर्फ एक पंक्ति या दो बदल रहे हैं तो आमतौर पर पूरी फ़ाइल को फिर से लोड करना आवश्यक नहीं है।


22
ध्यान रखें कि यह हमेशा वैसा नहीं हो सकता जैसा आप सोचते हैं कि यह करता है। यदि आपके पास वे चर हैं जिनकी सामग्री फ़्लॉप हो जाती है (यानी इसके विपरीत एक बूलियन सेट करना) तो व्यवहार फ़ाइल लोड करने के समान नहीं होगा।
चोलिदा

4
आम तौर पर किसी भी दुष्प्रभाव से वांछित व्यवहार के टूटने की संभावना है: फ़ाइलें लोड करना, आदि
vemv

जब मैं ऐसा करता हूं, तो मुझे संदेश मिलता है: लोड-विद-कोड-रूपांतरण: प्रतीक का चर के रूप में मूल्य शून्य है: n
क्रिस मैरी

2
इसके बजाय एक के पीछे बिंदु हिलाने की defunया defvar, आप भी यह घोषणा शरीर और प्रकार के अंदर छोड़ सकते हैं C-M-x। बेहद सुविधाजनक।
थॉमस

151

बहुत अजीब है कि बहुत सुविधाजनक है

M-x eval-buffer

यहाँ उल्लेख नहीं है।

यह तुरंत बफर में सभी कोड का मूल्यांकन करता है, इसकी सबसे तेज विधि, यदि आपका .emacsबेरोजगार है।


3
कौन कहता है कि .emacs(या होना है) उदासीन?
माइक

@ माइक: मुझे नहीं। "ए, बी सच है" मेरे लिए अभिप्राय है, "यदि ए, बी सत्य है", लेकिन मैं देख सकता हूं कि आपका क्या मतलब है। यदि और अधिक स्पष्टता के लिए मुझे दिया गया है, तो मैं बदल देता हूं।
पीटर

7
@ माइक: जब यह समझ में .emacsनहीं आता है कि क्या होगा?
ज़ाज़

मैंने सोचा होगा कि यह पहला सुझाव है।
स्ट्राइकर

1
मैं यह नहीं कहूंगा कि यह अच्छी शैली है लेकिन ऐसा हो सकता है। उदाहरण के लिए, आप पहले से परिभाषित (पहले स्टार्टअप से) एक फ़ंक्शन को फिर से परिभाषित नहीं करने का विकल्प चुन सकते हैं। हो सकता है कि आपको अपनी init फ़ाइल का मूल्यांकन करते समय इसकी परिभाषा में कोई बदलाव न दिखाई दे।
कलीगुल

43

आप आमतौर पर बदले हुए क्षेत्र का केवल पुनर्मूल्यांकन कर सकते हैं। ~ / .Emacs का क्षेत्र चिह्नित करें जिसे आपने बदला है, और फिर उपयोग करें M-x eval-region RET। यह अक्सर पूरी फ़ाइल के पुनर्मूल्यांकन से अधिक सुरक्षित होता है क्योंकि एक .emacs फ़ाइल को लिखना आसान होता है जो दो बार लोड होने के बाद काफी सही काम नहीं करता है।


2
दिलचस्प। मैंने एक .emacs फ़ाइल के विचार पर विचार नहीं किया था जो बेकार नहीं थी। कुछ के लिए बाहर देखने के लिए के रूप में मैं के साथ शुरू Eisp
Erik

2
मुझे लगता है कि यह एक .emacs फ़ाइल को खोजने के लिए दुर्लभ है , जो एक तरह से एक निष्पादन के रूप में एक ही राज्य में जिसके परिणामस्वरूप दो निष्पादनों की मजबूत अर्थ में कम से कम है। बहुत कम से कम, यह विभिन्न सूचियों के लिए बहुत आम है, अक्सर ऐसे तरीकों से जो दूसरी बार निष्पादित होने पर डुप्लिकेट प्रविष्टियों को दबा नहीं पाएंगे।
डेल हाग्लगंड

1
एक अन्य विचार: ऊपर दिए गए सुझाव का उपयोग करते हुए, यह संभव है कि आपके द्वारा प्राप्त emacs राज्य वह नहीं है जो आपके .emacs वास्तव में करता है। यानी, चूंकि आपने एक साफ स्लेट से संपूर्ण .emacs फ़ाइल को निष्पादित नहीं किया है, आप वास्तव में यह नहीं जानते कि यह वही है जो आप चाहते हैं।
डेल हाग्लगंड

1
यह कहा जा रहा है, क्या यह संभव नहीं होगा। एक आदर्श तरीके से .emacs? वैश्विक राज्य icky है।
एहतेश चौधरी

39

यदि आपको अपनी .emacs फ़ाइल वर्तमान में सक्रिय बफर में खुली है:

एमएक्स eval-बफर

12
यहाँ एक बात का ध्यान रखना चाहिए कि ऐसा करना आपको पुनः आरंभ करने के दृष्टिकोण के समान नहीं छोड़ सकता है । (कंट्रीब्यूटेड उदाहरण: यदि आपके .emacs में "टॉगल" का प्रभाव था)।
लुपियाड

28
M-x load-file
~/.emacs

1
ऐसा करने पर मुझे पता चला कि मेरे विंडोज 7 इंस्टॉलेशन पर, .emacs.d फ़ोल्डर उपयोगकर्ताओं के होम फ़ोल्डर के बजाय% appdata% फ़ोल्डर में स्थित था।
बैसड्रॉप कंबरवुबवबूब


13

समाधान

M-: (load user-init-file)


टिप्पणियाँ

  • आप इसे Eval:शीघ्र (कोष्ठकों सहित) में टाइप करते हैं
  • user-init-file~/.emacsडिफ़ॉल्ट रूप से मान (कॉन्फ़िगरेशन फ़ाइल पथ की ओर इशारा करते हुए) एक चर है
  • (load)कम, पुराना और गैर-संवादात्मक संस्करण है (load-file); यह एक एमएसीएस कमांड (टाइप किए जाने वाला M-x) नहीं है, बल्कि एक मात्र फंक्शन है

निष्कर्ष

M-: > M-x


क्या M-:> Ctrl Alt x है? आपके तर्क के आधार पर, मैं कल्पना करता हूं कि M-: <CMx जब init फ़ाइल में केवल एक ही लाइन बदली जाती है? शायद यह सिर्फ == है
रॉबर्ट ह्यूटन

12

अन्य लोगों ने पहले से ही आपके प्रश्न का उत्तर दिया है, लेकिन मुझे पता है कि मैं आमतौर पर उन पंक्तियों को निष्पादित करना चाहता हूं जो मैंने लिखा था। उसके लिए, CtrlAltxलिस्प में ठीक काम करता है।


3
यह भी देखें eval-lastsexpमें,C-x C-e
डेरेक Slager

के साथ C-M-x, आपको "लिस्प के अंत में" होना जरूरी नहीं है - क्या आप C-x C-eशायद सोच रहे हैं ? अच्छी बात यह C-M-xहै कि आप इसे तब भी लागू कर सकते हैं, जब बिंदु किसी फ़ंक्शन / चर घोषणा के बीच में हो।
थॉमस

मैं शायद उस समय लिस्प के अंत में जाने की आदत में था जब मैंने केवल Cx Ce का उपयोग किया था। पकड़ने के लिए धन्यवाद!
बाहबर

9

मेरा सुझाव है कि आप शुरू में ऐसा न करें। इसके बजाय, एक नया ईमैक्स सत्र शुरू करें और देखें कि आपने जो भी बदलाव किए हैं, वे सही तरीके से काम करते हैं या नहीं। इस तरह से करने का कारण यह है कि आपको ऐसी स्थिति में छोड़ने से बचें, जहां आपके पास एक निष्क्रिय .emacs फ़ाइल है, जो लोड करने में विफल रहती है या सफाई से लोड करने में विफल रहती है। यदि आप अपने सभी संपादन मूल सत्र में करते हैं, और एक नए सत्र में आपके सभी परीक्षण, तो आपको हमेशा कुछ न कुछ विश्वसनीय होगा, जो कि कोडिंग के बारे में टिप्पणी कर सके।

जब आप अंततः अपने परिवर्तनों से खुश होते हैं, तो आगे बढ़ें और फिर से लोड करने के लिए अन्य उत्तरों में से एक का उपयोग करें। मेरी व्यक्तिगत पसंद evalसिर्फ आपके द्वारा जोड़े गए / बदले गए अनुभाग को करना है, और यह करना है कि बस जोड़े गए / बदले गए कोड और कॉल के क्षेत्र को उजागर करें M-x eval-region। ऐसा करने से उस कोड का मूल्यांकन कम से कम हो जाता है, जो किसी अनजाने साइड-इफ़ेक्ट को कम करता है, जैसा कि लुयोपेड बताता है।



7
C-x C-e ;; current line
M-x eval-region ;; region
M-x eval-buffer ;; whole buffer
M-x load-file ~/.emacs.d/init.el

4

मैं वर्तमान में Ubuntu 15.04 पर हूं; मुझे इसके लिए एक कुंजी परिभाषित करना पसंद है।
[एम-इंसर्ट] मेरे कीबोर्ड पर ऑल-इंसर्ट का अनुवाद करता है।
इसे अपने .emacs फ़ाइल में रखें:

(global-set-key [M-insert] '(lambda() (interactive) (load-file "~/.emacs")))

3

इसे अपनी init फाइल में परिभाषित करें और Mx reload-user-init-file द्वारा कॉल करें

(defun reload-user-init-file()
  (interactive)
  (load-file user-init-file))

2

यद्यपि M-x eval-bufferआप काम करेंगे आप टॉगल और अन्य समान चीजों के साथ समस्याओं में भाग सकते हैं। एक बेहतर तरीका यह हो सकता है कि आप अपने .emacs (या यहां तक ​​कि अगर आपके चारों ओर गड़बड़ कर रहे हों) में व्हाट्स नए को चिह्नित करें या फिर हाइलाइट करें M-x eval-region। उम्मीद है की यह मदद करेगा।


2

यहाँ अपने विन्यास का त्वरित परीक्षण करने का एक त्वरित और आसान तरीका है। आप C-x C-eविशिष्ट लिस्प के अंत में कुछ फ़ंक्शन को व्यक्तिगत रूप से निष्पादित करने के लिए भी उपयोग कर सकते हैं ।

Cx Ce कमांड eval-last-sexp (वैश्विक-मानचित्र में पाया गया) चलाता है, जो एक संकलित लिस्प फ़ंक्शन है।

यह Cx Ce के लिए बाध्य है।

(eval-last-sexp EVAL-LAST-SEXP-ARG-INTERNAL)

बिंदु से पहले सेक्सप का मूल्यांकन करें; इको क्षेत्र में प्रिंट मूल्य। उपसर्ग तर्क के साथ, वर्तमान आउटपुट को वर्तमान बफर में प्रिंट करें।

आम तौर पर, यह फ़ंक्शन वैरिएबल 'एवल-एक्सप्रेशन-प्रिंट-लेंथ' और 'एवैल-एक्सप्रेशन-प्रिंट-लेवल' के मूल्य के अनुसार लंबे आउटपुट को रौंद देता है। शून्य के एक उपसर्ग तर्क के साथ, हालांकि, ऐसी कोई छंटनी नहीं है। इस तरह के एक उपसर्ग तर्क भी पूर्णांक को कई अतिरिक्त प्रारूपों (ऑक्टल, हेक्साडेसिमल, और चरित्र) में मुद्रित करने का कारण बनता है।

यदि 'eval-एक्सप्रेशन-डीबग-ऑन-एरर' नॉन-नील है, जो कि डिफ़ॉल्ट है, तो यह कमांड डिबगर में प्रवेश करने के लिए सभी त्रुटियों की व्यवस्था करता है।


2

जैसे आदेशों के अलावा एमएक्स eval-बफर या एमएक्स लोड फ़ाइल आप कमांड लाइन से एक ताजा Emacs को पुनः आरंभ कर सकते हैं:

emacs -q --load "init.el"

उपयोग उदाहरण stackoverflow.com/questions/44959535/company-backends-in-gnu-emacs/


सवाल पूछता है कि Emacs को फिर से शुरू किए बिना यह कैसे करना है। तकनीकी रूप से प्रश्न का उत्तर देते हुए एक नई प्रति लॉन्च करना, प्रश्न की भावना के अनुकूल नहीं लगता है। 😄
chwarr

0

आप इस तरह से emacs के लिए की-बाइंडिंग सेट कर सकते हैं

;; reload emacs configuration
(defun reload-init-file ()
  (interactive)
  (load-file "~/.emacs"))

(global-set-key (kbd "C-c r") 'reload-init-file) 

आशा है कि यह मदद करेगा!


-2

यदि आप Emacs के अंदर एक खोल खोला है, तो आप भी कर सकते हैं:

. ~/.emacs

कुछ प्रमुख स्ट्रोक बचा सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.