2010-10-26 20 views
11

एक Emacs शुरुआत के रूप में, मैं एक मामूली मोड लिखने पर काम कर रहा हूँ। प्रोग्रामिंग elisp की मेरी वर्तमान (बेवकूफ) विधि में परिवर्तन करने, Emacs को बंद करने, Emacs को पुनरारंभ करने, और परिवर्तन को देखने के होते हैं। मैं इस प्रक्रिया को कैसे व्यवस्थित कर सकता हूं? क्या सब कुछ ताज़ा करने के लिए कोई आदेश है?मैं एमैक्स लिस्प कोड को आसानी से कैसे लोड कर सकता हूं क्योंकि मैं इसे संपादित कर रहा हूं?

उत्तर

15

आप एम-सी-एक्स (eval-defun) का उपयोग करने का प्रयास कर सकते हैं, जो बिंदु के चारों ओर शीर्ष-स्तर के फॉर्म का फिर से मूल्यांकन करेगा। विपरीत एम एक्स eval-बफर या सी एक्स सी-ए (exal-last-sexp), इस चर defvar और defcustom उनकी प्रारंभिक मान है, जो हो सकता है आप को क्या ट्रिपिंग है के साथ घोषित रीसेट कर देगा।

2

एम-एक्स eval-buffer इसे करना चाहिए।

+0

इवल-बफर कोड का पुनर्मूल्यांकन करता है, लेकिन मामूली मोड का व्यवहार अपडेट नहीं होता है, भले ही मैं इसे बंद कर दूं। क्या कोई ऐसा आदेश है जिसका उपयोग मैं नाबालिग मोड को पुनः लोड करने के लिए संयोजन में कर सकता हूं? – davidscolgan

+0

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

1

यह सब आप जो लिख रहे हैं उस पर निर्भर करता है और आपने इसे कैसे लिखा है। मोड को टॉगल करना चाहिए आपको नया व्यवहार प्राप्त करना चाहिए।

(define-minor-mode my-minor-mode 
    "doc string" 
    nil 
    "" 
    nil 
    (if my-minor-mode 
     (progn 
     ;; do something when minor mode is on 
    ) 
    ;; do something when minor mode is off 
    ) 

लेकिन, एक और तरीका है इसे जल्दी जाँच करने के लिए अपने मौजूदा एक से एक नया Emacs अंडे देने के लिए होगा: आप [define-minor-mode][1] का उपयोग कर रहे हैं, तो आप मैक्रो के शरीर कि मोड चर बंद कुंजी में कोड जोड़ सकते हैं :

M-x shell-command emacs& 
3

इसके अलावा C-u C-M-x और इस बिंदु पर परिभाषा मूल्यांकन करता है और वहाँ एक ब्रेकपाइंट सेट की कोशिश है, इसलिए जब आपको लगता है कि समारोह मारा आप डिबगर में गिरा दिया मिलता है।

M-x ielm Emacs कोड विकसित करते समय अधिक सुविधा युक्त लिस्प REPL के रूप में भी बहुत उपयोगी है।

1

क्या शॉन ने कहा। इसके अलावा, मेरे पास एक परीक्षण के साथ (eval-defun) एक कुंजी से जुड़ा हुआ है। विकास लूप तब बन जाता है: 1) फ़ंक्शन संपादित करें, 2) eval-and-test कुंजी दबाएं, 3) परिणाम देखें, 4) दोहराना। यह है अत्यधिक तेजी से।

विकास के दौरान मैं एक परीक्षण लिखता हूं, इसे jmc-test पर बांधता हूं, फिर उपरोक्त कुंजी का उपयोग अपने बस-संपादित फ़ंक्शन पर चलाने के लिए करें। मैं और संपादित करता हूं, फिर फिर से जांचें, फिर से परीक्षण करें। जब फ़ंक्शन काम करता है, तो मैं jmc-test को ज़ैप करता हूं, एक और फ़ंक्शन संपादित करता हूं, और एक और जेएमसी-टेस्ट फ़ंक्शन लिखता हूं। वे हमेशा कोड की एक पंक्ति हैं, बस बाहर धक्का आसान है।

(defun jmc-eval-and-test() 
    (interactive) 
    (eval-defun nil) 
    (jmc-test)) 
(define-key emacs-lisp-mode-map (kbd "<kp-enter>") 'jmc-eval-and-test) 

(when t 
    (defun myfunc (beer yum) 
    (+ beer yum)) 
    (defun jmc-test() (message "out: %s" (myfunc 1 2)))) 

"myfunc" संपादित करते समय, अगर मैं कीपैड दर्ज करता हूं, तो यह "आउट: 3" प्रिंट करता है।

+0

आपके पास (कब ...) फॉर्म क्यों है? अन्यथा, इसे प्यार करो! – ftravers

0

मैं सिर्फ एक समारोह एलडीएफ, मेरे .emacs फ़ाइल में (लोड फ़ाइल का संक्षिप्त रूप) इस तरह कहा जाता है को परिभाषित:

(defun एलडीएफ (आर्ग) (इंटरैक्टिव 'पी') (लोड फ़ाइल (बफर -फाइल-नाम))

जैसा कि आप देख सकते हैं, यह छोटा फ़ंक्शन वर्तमान बफर के फ़ाइल नाम को देखता है और फिर फ़ाइल लोड करता है। जब भी मुझे वर्तमान बफर elisp फ़ाइल को फिर से लोड करने की आवश्यकता होती है, तो बस "एम-एक्स एलडीएफ" टाइप करें

संबंधित मुद्दे