2010-04-15 9 views
10

में इमैक सही ढंग से इंडेंट बनाने के लिए कैसे करें, तो जब मैं इंडेंट करता हूं तो अन्यथा emacs lisp में निर्माण करता है, तो अन्य ब्लॉक ठीक से इंडेंट नहीं करता है। मुझे क्या मिलता है:अगर emisp

 
(defun swank-clojure-decygwinify (path) 
    "Convert path from CYGWIN UNIX style to Windows style" 
    (if (swank-clojure-cygwin) 
     (replace-regexp-in-string "\n" "" (shell-command-to-string (concat "cygpath -w " path))) 
    (path))) 

जहां अन्य फॉर्म को उसी रूप में उसी स्तर पर इंडेंट नहीं किया गया है। क्या इसे ठीक करने का कोई स्पष्ट तरीका है?

+5

यह उचित इंडेंटेशन है। – scottfrazer

+4

* कारण * यह इस तरह इंडेंट क्यों हो जाता है क्योंकि "अन्य रूप" में वास्तव में "सभी" अभिव्यक्ति के बाद सभी * अभिव्यक्तियां शामिल होती हैं, और वे * सभी * उस स्तर पर इंडेंट प्राप्त करते हैं। ध्यान में रखते हुए 'if' कथन के बारे में सोचते समय, डिफ़ॉल्ट इंडेंटेशन समझ में आता है। –

उत्तर

16

यह उचित इंडेंटेशन है। मैनुअल से एक उद्धरण:

शब्द "else" लिस्प कोड में नहीं लिखा गया है; का अन्य भाग 'अगर' अभिव्यक्ति तब भाग के बाद आता है। लिखा लिस्प में, बाकी-भाग आमतौर पर अपने आप में एक लाइन पर शुरू करने के लिए लिखा गया है और तो-भाग की तुलना में कम इंडेंट है:

(if TRUE-OR-FALSE-TEST 
    ACTION-TO-CARRY-OUT-IF-THE-TEST-RETURNS-TRUE 
    ACTION-TO-CARRY-OUT-IF-THE-TEST-RETURNS-FALSE) 

उदाहरण के लिए, निम्नलिखित if अभिव्यक्ति प्रिंट संदेश 4 is not greater than 5! जब आप हमेशा की तरह यह मूल्यांकन:

(if (> 4 5)        ; if-part 
    (message "4 falsely greater than 5!") ; then-part 
    (message "4 is not greater than 5!")) ; else-part 

ध्यान दें कि खरोज के विभिन्न स्तरों इसे करने के लिए आसान और को-भाग से तत्कालीन हिस्सा अलग करते हैं। (। जीएनयू Emacs कई आदेशों कि स्वचालित रूप से मांगपत्र if भाव सही ढंग से * ध्यान दें जीएनयू Emacs में मदद करता है आप सूचियाँ प्रकार है:। टाइप सूचियाँ)

यह एक ऐसी सुविधा है, नहीं एक बग :-)

8

मैं प्रासंगिक दस्तावेज आसान नहीं है, लेकिन यह है कि तुम क्या चाहते हो रहा है:

(put 'if 'lisp-indent-function nil) 

इसके अलावा, आप शब्द "ठीक से" का दुरुपयोग किया; परिभाषा के अनुसार, हालांकि emacs इंडेंट्स "उचित" है :)

+4

लोग अक्सर "ठीक से" की अवधारणाओं को भ्रमित करते हैं और "जिस तरह से मैं अभी आया हूं" – Singletoned

5

डिफ़ॉल्ट शैली है उचित है - Emacs Lisp के लिए। लिस्प के सामान्य लिस्प और अन्य स्वादों के लिए, "अन्य" खंड "तत्काल" खंड के नीचे गठबंधन किया जाना चाहिए। कॉमन लिस्प indendation पाने के लिए आपको कुछ इस तरह करना है:

(set (make-local-variable lisp-indent-function) 
    'common-lisp-indent-function) 

इस अपने आप ही हो जाने के लिए, आप कुछ इस तरह कर सकते हैं:

(add-hook 'lisp-mode-hook 
      '(lambda() 
      (set (make-local-variable lisp-indent-function) 
        'common-lisp-indent-function)))) 

हालांकि, ध्यान दें कि लिस्प-Emacs स्लिम जैसे इंटरैक्शन पैकेज इंडेंटेशन व्यवहार को ओवरराइड कर सकते हैं, और उस स्थिति में, उपरोक्त कुछ भी नहीं कर सकता है। उपर्युक्त मूल Emacs में काम करना चाहिए।

+0

उत्सुक है कि यह 'lisp-mode' के लिए डिफ़ॉल्ट नहीं है (या कम से कम' सामान्य-lisp- मोड', हालांकि अब मैं देखता हूं कि लिस्प-मोड के लिए बस एक उपनाम है) – phils

0

अपने आप को यह विश्वास करने के लिए प्रेरित करें कि एलिसप एक योजना है और progn का उपयोग करें। यह तब और अन्य अभिव्यक्तियों को सीमित करता है लेकिन उन्हें एक ही कॉलम पर इंगित करता है:

(defun swank-clojure-decygwinify (path) 
    "Convert path from CYGWIN UNIX style to Windows style" 
    (if (swank-clojure-cygwin) 
     (replace-regexp-in-string "\n" "" (shell-command-to-string (concat "cygpath -w " path))) 
    (progn 
     (path)))) 
संबंधित मुद्दे