2011-05-26 11 views
6

क्या emacs के लिए एक जेएस मोड है जो npm style के साथ काफी अनुकूल है?एनएपीएस शैली के लिए Emacs जेएस मोड

अब तक मैं js2-mode के संशोधन के साथ काम कर रहा हूं, मूलभूत सुविधाओं को ओवरराइड किया गया है और 'टैब कुंजी = 2 रिक्त स्थान' के साथ प्रतिस्थापित किया गया है।

var o = { foo : 'bar' 
     , baz : 'foo' 
     } 
    , p 
    , q = new Squash(o 
        , { start: 0 
        , limit: 50 
        } 
       ) 

यह है के रूप में, js2 मोड अल्पविराम खड़े उदाहरण के लिए 'सही ढंग से इंडेंट करने के लिए और संभव स्थितियों के बीच चक्र अपने सबसे अच्छे रूप की कोशिश करता है, लेकिन: लेकिन यह मेरे संपादक इस तरह इंडेंट संभालने में सक्षम हो के लिए अच्छा होगा आर के तहत विकल्प में से एक नहीं है। बेशक, emacs में सभ्य इंडेंटिंग कोड लिखना मुश्किल है और मेरा elisp वहाँ snuff करने के लिए नहीं है।

ध्यान दें कि अगर कोई अन्य संपादक जानता है जो इसके लिए बेहतर काम करेगा, तो मैं स्विच करने के लिए खुला हो सकता हूं।

उत्तर

1

Emacs 23.2 में जेएस-मोड शामिल है, जो एक नामित और स्पर्श-अप एस्प्रेसो है। मैं सिर्फ अपने redunkulous कोड पर "मांगपत्र-क्षेत्र" किया था और यह मिल गया:

var o = { foo : 'bar' 
      , baz : 'foo' 
     } 
, p 
, q = new Squash(o 
        , { start: 0 
         , limit: 50 
        } 
       ) 

मुझे लगता है कि वास्तव में आप क्या चाहते हैं नहीं है। कॉमा आपको शायद पसंद से अलग ऑफसेट कर रहे हैं।

(हे भगवान कि बदसूरत है।)


संपादित
ठीक है मैं js-मोड में देखा और खरोज js--proper-indentation के द्वारा किया जा रहा है। यह वर्तमान रेखा को देखता है और फिर इंडेंट कैसे करें के बारे में निर्णय लेने का प्रयास करता है।

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

var o = { foo : 'bar' 
     , baz : 'foo' 
     } 
    , p 
    , q = new Squash(o 
        , { start: 0 
        , limit: 50 
        } 
       ) 

मुझे लगता है कि यह है कि आप क्या चाहते हैं, लेकिन यह अभी भी पूरी तरह से मेरे लिए टूट लग। वैसे भी इस तरह मैंने किया।

इंजेक्षन js--proper-indentation के लिए इस सूची के शीर्ष में इस स्थिति:

(defun js--proper-indentation (parse-status) 
    "Return the proper indentation for the current line." 
    (save-excursion 
    (back-to-indentation) 
    (cond 
      ((looking-at ",") 
      (let ((spos 
        (save-excursion 
        (while (looking-back "}[\t\n ]*") 
         (backward-sexp) 
         (if (looking-back ",[\t\n ]*") 
          (re-search-backward ",[\t\n ]*"))) 

        (cond 
        ((looking-back "\\(,\\|(\\)[ \t]*\\<\\([^:=\n\t ]+\\)[ \t\n]*") 
         (re-search-backward "\\(,\\|(\\)[ \t]*\\<\\([^:=\n\t ]+\\)[ \t\n]*" (point-min) t) 
         (+ (current-column) 2)) 

        ((re-search-backward "\\<\\([^:=\n\t ]+\\)[ \t]*\\(:\\|=\\)" (point-min) t) 
         (current-column)) 
        (t 
         nil))))) 
      (if spos 
       (- spos 2) 
       (+ js-indent-level js-expr-indent-offset)))) 
     .... 

कि defun में स्थिति के बाकी रखना सुनिश्चित करें - मैं वे क्या करते हैं शायद महत्वपूर्ण पता नहीं है लेकिन the're ।

कोई विचार नहीं है कि यह मजबूत है, मैंने आपके एक परीक्षण मामले को छोड़कर इसका परीक्षण नहीं किया है। लेकिन यह कंधे आपको शुरू कर देता है।

+0

हाँ कहा जाता है, लोगों को अक्सर js2 मोड एस्प्रेसो (जे एस-मोड) से खरोज शामिल करके बढ़ाने। लेकिन एस्प्रेसो में वास्तव में समस्या है जिसे मैं हल करने की कोशिश कर रहा हूं। –

+0

पुन: संपादित करें धन्यवाद, यह बहुत उपयोगी है। मुझे कुछ परीक्षण करना होगा और इस पर वापस जाना होगा। –

2

आपको the improved js2-mode fork पर एक नज़र रखना चाहिए, ऐसा लगता है कि यह सामान्य मोड से थोड़ा बेहतर इंडेंटेशन को संभालने में सक्षम है।

5

चीसो के सुझाव के लिए बहुत धन्यवाद के साथ, यहां कुछ हद तक हैक-एक साथ मोड-कॉम्बो है जो महान पार्सिंग और जेएस 2-मोड की त्रुटि-जांच का उपयोग करते समय एस्प्रेसो तरीके से कॉमा-प्रथम या अल्पविराम-आखिरी शैलियों के लिए इंडेंटिंग को संभालता है : https://github.com/thomblake/js-mode

यदि कोई समस्या आती है, तो बग रिपोर्ट दर्ज करने के लिए स्वतंत्र महसूस करें - मैं उन्हें ठीक करना चाहता हूं।

संपादित करें: अब https://github.com/thomblake/js3-mode में पाया और js3 मोड

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