2010-03-03 12 views
12

मैं emacs में जावास्क्रिप्ट के साथ काम करने के लिए जेएस 2-मोड का उपयोग कर रहा हूं और अधिकांश भाग के लिए यह बहुत उपयोगी है। हालांकि, इंडेंट तरीकों बहुत निराशा होती है जब jQuery, बंद किया जाना, और JSON के साथ काम कर उदाहरण के लिए, कर रहे हैं ... कोड काश कि इस तरह इंडेंट किए जाएंगे:Emacs + js2-mode: पूरी तरह इंडेंटिंग अक्षम करें?

var foo = jQuery('#mycontainer ul li').each(function(el){ 
              var bar = el.html(); 
             }); 
:

var foo = jQuery('#mycontainer ul li').each(function(el){ 
    var bar = el.html(); 
}); 

के रूप में बाहर कर देता है

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

+0

यह पुराने जेएस 2-मोड के लिए एक समस्या थी। समस्या अब जेएस 2-मोड के नवीनतम जीएनयू ईएलपीए संस्करण के साथ चली गई है जिसे 'एम-एक्स सूची-पैकेज' से स्थापित किया जा सकता है। उस संस्करण के साथ, किसी क्षेत्र पर सी-एम-\ या टीएबी को पारंपरिक तरीके से लाइनों को इंडेंट करना चाहिए, जो कि आप लिस्प-जैसे तरीके से अपेक्षा करते हैं। –

उत्तर

5

मुझे लगता है मैं इस एक टिप्पणी के बजाय एक पूरा जवाब कर देगा; espresso-mode को Emacs के साथ शामिल किया गया है, और इसे Emacs के लिए जावास्क्रिप्ट मोड (एक जावास्क्रिप्ट मोड के बजाय जो Emacs के अंदर चलाने के लिए होता है) के लिए डिज़ाइन किया गया है। यह नियमित प्रोग्रामिंग मोड की तरह काम करता है, और जिस तरह से आप चाहें इंडेंट चीजों के साथ भी होता है।

+0

मैं emacs 22 का उपयोग कर रहा हूं, लेकिन हाल ही में एस्प्रेसो-मोड जोड़ा गया है और इसे डिफ़ॉल्ट से अधिक * बेहतर * पाया है। धन्यवाद! –

+2

मुझे नहीं लगता कि यह js2 मोड की सभी अच्छी सुविधाओं को फेंकने लायक है जब आप लिंक @ एंटोनजे प्रदान कर सकते हैं (http://mihai.bazon.net/projects/editing-javascript-with-emacs-js2-mode) दोनों दुनिया के सर्वश्रेष्ठ पाने के लिए। मैं इसका उपयोग कर रहा हूं और मुझे कोई पछतावा नहीं है। –

1

आप बस टैब बाध्य कर सकते हैं खुद को डालने के लिए:

(add-hook 'js2-mode-hook 'my-js2-mode-hook) 
(defun my-js2-mode-hook() 
    (define-key js2-mode-map [tab] 'self-insert-command)) 

(लेकिन बेहतर समाधान, ज़ाहिर है, पता लगाने के लिए क्यों मोड सोचता है कि यह गुमनाम कार्यों के लिए इतना खरोज की जरूरत होगी, और इसे ठीक ।)

2

जेएस 2-मोड इंडेंटिंग "बाउंस" का समर्थन करता है; आप अलग अलग होने की संभावना इंडेंट के स्तर का चयन करने के लिए कई बार टैब दबा सकते हैं, तो आप प्रभाव प्राप्त करने के आपको लगता है कि जिस तरह से चाहते हैं सक्षम हो सकता है:

(setq js2-bounce-indent-p t) 
+0

पहले से ही यह कोशिश की है, लेकिन इसका उपयोग करने वाले एल्गोरिदम को इंडेंट सही नहीं मिलता है। हालांकि धन्यवाद! –

4

चेक आउट, js2-मोड में खरोज समारोह नक्शे आंशिक रूप से esresso मोड से खरोज उपयोग करने के लिए (अब js-मोड के रूप में जाना Emacs 23.2 और नए में शामिल है):

http://mihai.bazon.net/projects/editing-javascript-with-emacs-js2-mode

वास्तव में काम करता है मैं Emacs में खरोज काम करने की उम्मीद और आप अभी भी js2 मोड से पार्स awesomeness प्राप्त ना हो।

6

आपके प्रश्न का सीधा जवाब नहीं है, लेकिन js2-mode में इंडेंटिंग में सुधार हुआ है।

सुधारों में से एक यह है कि आपका उदाहरण कोड जिस तरह से आप यहां पूछते हैं उसका इंडेंट किया गया है।

+0

अब कांटा के कई सुधार मूल जेएस 2 मोड में आयात किए गए हैं और ईएलपीए संस्करण में भी उन सभी सुधार हैं। –

+0

अधिक सटीक होने के लिए, "कांटा" और ईएलपीए का एक ही संस्करण है, और आधिकारिक पृष्ठ पीछे पीछे है। – Dmitry

1

एक अन्य विकल्प js3-mode है। यह डिफ़ॉल्ट रूप से इस तरह इंडेंट करता है, लेकिन ऐसा लगता है कि कुछ विकल्प हैं जो आपको अपनी पसंद के लिए इसे ट्विक करने में सक्षम बना सकते हैं।

var foo = jQuery('#mycontainer ul li').each(function(el){ 
      var bar = el.html(); 
      }); 
संबंधित मुद्दे