2009-03-06 14 views
62

मुझे विम में ठीक से इंडेंटिंग जावास्क्रिप्ट इंडेंटिंग नहीं लग रहा है। निम्नलिखित पर विचार करें:मैं विम में गलत इनलाइन जावास्क्रिप्ट इंडेंटेशन कैसे ठीक करूं?

$(document).ready(function() { 

    // Closing brace correctly indented 
    $("input").focus(function() { 
     $(this).closest("li").addClass("cur-focus"); 
    }); // <-- I had to manually unindent this 

    // Closing brace incorrectly indented 
    $("input").blur(function() { 
     $(this).closest("li").removeClass("cur-focus"); 
     }); // <-- This is what it does by default. Argh! 

    }); 

विम स्वचालित रूप से बंद करने ब्रेस वहाँ दूसरे मामले में दिखाया गया इंडेंट पर जोर देते हैं लगता है। अगर मैं पूरी फाइल को फिर से इंडेंट करता हूं तो यह वही होता है। पहले मामले में देखी गई अधिक मानक जेएस इंडेंटिंग शैली का उपयोग करके मैं इसे स्वचालित रूप से इंडेंट कैसे प्राप्त करूं?

उत्तर

80

प्रेस्टन कोप्रिविका द्वारा JavaScript Indent: Javascript indenter (HTML indent is included) का उपयोग करें। oligofren से हेड-अप के लिए धन्यवाद - उसे एक अप-वोट दें।

+0

मैं सिर्फ आपके उत्तर में टिप्पणी करने का सुझाव दे रहा था कि शायद विम सिंटैक्स फ़ाइल शायद गायब हो सकता है। :) – m42

+0

मैं सोच रहा हूं कि क्यों जावास्क्रिप्ट इंडेंटेशन सभी भद्दा है, बहुत बहुत धन्यवाद! – FurtiveFelon

+0

मैं विशेष रूप से jQuery-code के साथ प्रदान किए गए ओओपी जावास्क्रिप्ट इंडेंटेशन के साथ इंडेवेशन-मुद्दों को जोड़ता हूं। एक काम इंडेंटेशन प्लगइन के लिए oligofren का जवाब देखें। – Markus

5

शायद इन सेटिंग्स का कुछ संयोजन आपकी वीआईएमआरसी फ़ाइल में होना चाहिए।

syntax on 
set syn=auto 
set showmatch 
filetype on 
filetype plugin on 
filetype indent on 
set tabstop=4 
set softtabstop=4 
set shiftwidth=4 
set expandtab 
+0

सुझावों के लिए बहुत धन्यवाद, लेकिन मुझे पहले से ही इनमें से अधिकतर सेट मिल चुके हैं और वे मदद नहीं कर रहे हैं। –

+0

मैं कभी-कभी मेल के साथ नोटिस करता हूं कि मिलान करने वाले ब्रेसिज़ एक टैब स्टॉप को तब तक बदलते हैं जब तक मैं कोड में उस पंक्ति को छोड़ देता हूं। मैंने * सोचा * कि "फाइलटाइप प्लगइन ऑन और फाइल टाइप इंडेंट" को ड्राइव करना था। क्या आपके पास जावास्क्रिप्ट के लिए एक वाक्यविन्यास फ़ाइल है? (मैं जेएस के साथ काम नहीं कर रहा हूं, इसलिए यह नहीं पता कि इसकी आवश्यकता है या नहीं – m42

+0

इनमें से कुछ सेटिंग्स के बिना, कोप्रिविका स्क्रिप्ट काम नहीं करेगी। –

0

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

gq भी उपयोगी है, यह इंडेंट्स के बजाए लाइनों को स्वरूपित करता है।

+0

इसके लिए धन्यवाद। कॉम्बो मैं आमतौर पर पूरी फाइल को इंडेंट करने के लिए उपयोग करता हूं gg = g है। मेरी समस्या यह थी कि जब मैंने ऐसा किया, तो जेएस सही ढंग से इंडेंट नहीं किया। समस्या का समाधान करने के ऊपर मेरा स्वयं का जवाब। –

3

मुझे यह वही समस्या थी।

http://www.vim.org/scripts/script.php?script_id=1840

यह IndentAnything प्लगइन

http://www.vim.org/scripts/script.php?script_id=1839

एक अतिरिक्त बोनस के रूप में, मैं इस मांगपत्र स्क्रिप्ट है कि जावास्क्रिप्ट ब्लॉकों काफी सुंदर कर देगा लिखा था की आवश्यकता है: यह सब जावास्क्रिप्ट खरोज लिपियों का सबसे अच्छा है । यह डिफ़ॉल्ट रूप से डिफ़ॉल्ट HTML indenter (और IndentAnything एक जब एक जावास्क्रिप्ट ब्लॉक के भीतर)

http://gist.github.com/371902

+0

ऐसा लगता है कि अधिकांश चीजें "गलत" होती हैं, जैसे इंडेंट के दो स्तर (फ़ंक्शन() {।) भी एक जिथब/बिबकेट रेपो नहीं होने के लिए चरम बिंदु खो देता है। –

+0

सहमत है कि यह सबसे ऊपर उत्तर देने से बेहतर है, फिर भी अच्छा नहीं है – Drachenfels

84

सबसे व्यापक और बग-मुक्त जावास्क्रिप्ट खरोज स्क्रिप्ट the one by Preston Koprivica है उपयोग करता है। प्रस्तावित उत्तर में तथाकथित ओओपी स्क्रिप्ट में गंभीर त्रुटियां हैं, और कोड को उचित रूप से इंडेंट नहीं करता है जिसमें स्क्वायर ब्रैकेट होते हैं।

+3

यह केवल मेरी जेएस-फाइलों के लिए काम कर रहा है (मुख्य रूप से jQuery कोड - एकाधिक ब्रेसिज़ और घुंघराले ब्रेसिज़ को एक ही पंक्ति पर शामिल करता है) – Markus

+1

नोट, मैंने कुछ समय पहले प्रेस्टन कोप्रिविका की लिपि से लिंक करने के लिए स्वीकृत उत्तर अपडेट किया था सूचक के लिए oligofren के लिए धन्यवाद। –

+1

नोट: मेरी विम कॉन्फ़िगरेशन में कुछ प्रेरणा की लिपि के '1.0' संस्करण को नई लाइनों पर ठीक से इंडेंट नहीं करने का कारण बनता है। संस्करण' बी 3.0' ठीक काम करता है, हालांकि। अगर आपको परेशानी है '1.0', इसके बजाए' b3.0' आज़माएं। –

17

लिपियों ऊपर उल्लेख किया बंद-वाक्य रचना अक्सर jQuery सही ढंग से में इस्तेमाल किया फ़ॉर्मेट नहीं करते:

$(function() { 
    // only one level of indentation, not two 
}); 

यह स्क्रिप्ट मेरे लिए बेहतर काम करता है: http://www.vim.org/scripts/script.php?script_id=2765

+5

इसके लिए धन्यवाद! एक साइड नोट के रूप में, सुनिश्चित करें कि github से संस्करण प्राप्त करें, जो बहुत अधिक है, बहुत नया है। – DMan

+2

यह मेरे लिए उच्च वोट वाले एक से बेहतर काम करता है। धन्यवाद। –

+0

अफसोस की बात यह है कि, इस इंडेंटेशन स्क्रिप्ट सरल मामलों पर विफल होती है जैसे कि एक नई लाइन पर ब्लॉक की उद्घाटन ब्रेस डालना, और उपयोगकर्ता टैब विस्तार सेटिंग्स का सम्मान नहीं करता है, उदाहरण के लिए जब मैंने इसे 4 स्पेस में विस्तारित करने के लिए कॉन्फ़िगर किया है तो 0 रिक्त स्थान के साथ इंडेंट करना। – aphax

10

इन उत्तरों से अधिकांश 2009 और से कर रहे हैं, स्पष्ट रूप से, पुराने हैं। से Preston's script.

स्थापना में थोड़ा और अधिक जटिल है अगर आप अभी तक Vundle का उपयोग कर शुरू नहीं किया है

vim-javascript और अधिक हाल ही में और अप करने की तारीख है, लेकिन यह के मुद्दों से ग्रस्त प्रतीत नहीं होता है विकल्प।

+0

ध्यान दें कि 'vim-जावास्क्रिप्ट' एचटीएमएल फाइलों में एम्बेडेड जावास्क्रिप्ट का समर्थन नहीं करता है (जहां तक ​​मैं कह सकता हूं)। –

+0

यह सबसे अच्छा जावास्क्रिप्ट प्लगइन है जो मैंने पार किया है। 2017 में अभी भी अच्छा है –

1

यदि कोई यहां आता है तो कृपया vim-javascriptpanglosshttps://github.com/pangloss/vim-javascript पर मुझे अब तक मदद मिली, यानी वीम 7.4। और ओलिगोफेरेन और चार्ल्स रोपर के उपर्युक्त समाधान नहीं थे।

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