2008-12-22 13 views
24

मैंने हाल ही में विम 7 (पहले विम 6) और smartindent सेटिंग का उपयोग शुरू किया। अधिकांश भाग के लिए, यह अच्छी तरह से काम करता है, हालांकि मुझे खुली ब्रेस के बाद एक टैब टाइप करने के लिए इतना उपयोग किया जाता है कि यह लगभग काउंटर-उत्पादक है।विम में कौन सी सेटिंग शैल स्क्रिप्ट में # टिप्पणियों को इंडेंट करने से इंटेलिजेंट के इनकार करने का विरोध करती है?

हालांकि, मनोचिकित्सक व्यवहार का एक टुकड़ा है। एक शेल स्क्रिप्ट संपादित करते समय, मैं वर्तमान इंडेंट स्तर पर एक टिप्पणी बनाने का प्रयास करता हूं, लेकिन smartindent के पास इसके साथ कुछ लेना देना नहीं होगा। यह जोर देता है कि टिप्पणी स्तर 0 (कोई इंडेंट नहीं) होनी चाहिए। इससे भी बदतर, यह शिफ्ट-दाएं ('>>' और दोस्तों को तोड़ देता है ताकि वे काम न करें। यह पूरी तरह से अपर्याप्तता है, और मैं जानना चाहता हूं कि इसे ठीक करने का सबसे अच्छा तरीका क्या है?

(मैं भी smartindent के if के बाद then इंडेंट के बारे में विचार करने को उत्सुक नहीं हूँ।)

पसंदीदा समाधान मुझे पुस्तिका को कोसने की बचत होगी - मैं आलसी जा रहा हूँ। शेल स्क्रिप्ट संपादित करते समय इसे एक विकल्प 'smartindent बंद करें' (बाकी के लिए इसे छोड़ दें) '। एक और विकल्प smartindent के लिए नियंत्रण स्क्रिप्ट को कैसे ढूंढें और उन विशेषताओं को बदलने के लिए संपादित करने के लिए दिशानिर्देश होंगे जो मुझे पसंद नहीं हैं। अंतिम विकल्प (जिस पर मुझे सलाह नहीं है कि कैसे करना है - केवल यह संकेत है कि यह सर्वोत्तम है, या केवल स्वच्छता बहाल करने का तरीका) smartindent अनसेट करना है।

मैंने "(PHP and) annoying vim unindent rules" पर अस्पष्ट रूप से संबंधित प्रश्न देखा; यह मुझे प्रत्यक्ष उत्तर प्रदान नहीं करता है, हालांकि शायद cindent और वहां उल्लिखित संबंधित आइटम वास्तव में उत्तर का हिस्सा हैं।

+1

महान यहाँ जवाब: http://stackoverflow.com/questions/191201/indenting-comments-to-match-code-in-vim सही दिशा में – Dan

उत्तर

9

, इंडेंट फ़ाइल का पता लगाएं, (उदाहरण के लिए अपने सिस्टम पर /usr/share/vim/vim71/indent/sh.vim)

इस लाइन समस्या की तरह दिखता है:

 
setlocal indentkeys-=:,0# 

शायद आप कर सकते हैं इसे अपने .vimrc में ठीक करें या मैन्युअल रूप से एक कस्टम इंडेंट फ़ाइल लोड करें।

संपादित करें: यह मेरे विचार से कहीं अधिक जटिल दिखता है, लेकिन शायद कुछ इंडेंटिंग फ़ाइल में विशेष रूप से सेट किया गया है जिसे आपको ठीक करने की आवश्यकता होगी।

2 संपादित करें: ऐसा लगता है कि मैं पूरी तरह से गलत था, की जाँच करें:

Restoring indent after typing hash

या

howto-configure-vim-to-not-put-comments-at-the-beginning-of-lines-while-editing

+0

अच्छा संकेत दिए गए। एक पढ़ाई है।txt फ़ाइल जो कुछ पॉइंटर्स भी प्रदान करती है - विशेष रूप से ': इंडेंट-एक्सप्रेशन' में मदद करें, जो बदले में ऑनलाइन मैनुअल के 30.3 तक इंगित करती है। लेकिन वह फ़ाइल वह है जिसे मुझे हैक करने, कसाई या अन्यथा संशोधित करने, प्रतिलिपि बनाने या बदलने की आवश्यकता है। धन्यवाद! –

+0

हे ... पता चला कि स्मार्टइंडेंट सी प्री-प्रोसेसर निर्देशों की शुरुआत में # रखता है। मैं शायद ~/.vim/indent/sh.vim बनाकर खोल नियमों को पूरी तरह से रद्द करने जा रहा हूं जिसमें ': b: did_indent = 1' है। मैं आपके द्वारा जोड़े गए लिंक का भी दूसरा संपादन करूँगा। –

3

खैर, कुछ विकल्प तलाश करने की बजाय ':set cindent' का उपयोग सहित के बाद ':set smartindent', मैं बस ':set autoindent' का उपयोग करने के लिए वापस आ गया है। संभवतः इस सामान को ठीक तरह से काम करने के तरीके हैं जैसा मैं चाहता हूं, लेकिन यह काफी गड़बड़ है और पर्याप्त रूप से पर्याप्त है कि मुझे परेशान नहीं किया जा सकता है। मैंने पिछले 20-सालों के लिए autoindent के साथ ठीक काम किया है, और smartindent द्वारा प्रदान की गई अतिरिक्त घंटियों और सीटों के लाभ जो मैं इसके दुर्व्यवहार के रूप में मानता हूं उससे अधिक है।

आपकी सहायता के लिए, जुआन, धन्यवाद। मानो या नहीं, इससे मदद मिली - काफी कुछ।

मैं भी अन्य साफ आदेशों, हालांकि के एक जोड़े की खोज की इस पर अनुसरण करते हुए:।

>i} 
>a} 

ये सही-शिफ्ट कोड के ब्लॉक में हो 'i' संस्करण इंडेंट शरीर और समापन ब्रेसिज़ (मेरी पसंदीदा शैली) नहीं, और 'a' संस्करण बंद ब्रेसिज़ को इंगित करता है (संस्करण जो काम पर आवश्यक है)।

इसके अलावा, आप खोल पर क्रियान्वित आदेशों में '%' के लिए क्वालिफायर आवेदन कर सकते हैं:

:make %:r.o 

यह वर्तमान फ़ाइल नाम के 'मूल' पर कर (जो '%:r') के बाद चल पाएंगे '.o'। या, दूसरे शब्दों में, यदि मैं somefile.c संपादित कर रहा हूं, तो यह make somefile.o निष्पादित करता है।

+0

मदद करने के लिए खुशी हुई। स्थानांतरण ब्लॉक के बारे में टिप के लिए धन्यवाद। मैं हर समय ब्लॉक को स्थानांतरित करता हूं, लेकिन दृष्टि से पाठ का चयन कर रहा था और सही शिफ्ट (>>) ऑपरेटर का उपयोग कर रहा था। –

+0

मैं सबकुछ बदलने के लिए खुले या करीबी ब्रेस के साथ लाइन पर '>%' का उपयोग करता था। मैं ब्लॉक के शरीर को सही स्थानांतरित करने के लिए '>% <<% <<' का भी उपयोग करता हूं और फिर दो ब्रेसिज़ को अनइंडेंट करता हूं। लेकिन उन नए आदेशों को एक ब्लॉक के बीच में काम करना प्रतीत होता है, जो अच्छा है। –

1

मेरे पास मेरे .vimrc में निम्न पंक्तियां हैं और मैं समस्या का पालन नहीं करता हूं।

set smartindent 
inoremap # X^H# 

मैं सेट autoindent इन दो पंक्तियों के बाद किया करते थे लेकिन ऐसा लगता है यह कोई प्रभाव पड़ता है।

2

पर अपने .vimrc

filetype मांगपत्र में नीचे पंक्ति जोड़ें (यह फ़ाइल प्रकार के आधार पर सही मांगपत्र मोड सेट हो जाएगा)

1

हाँ कि बहुत कष्टप्रद है। smartindent वास्तव में केवल सी भाषाओं की तरह है। कैसे मैं कम से भाषा के आधार पर उपयुक्त खिसकने सक्षम देखें: मैं एक लंबे समय के लिए यह एक ही मुद्दा था http://www.pixelbeat.org/settings/.vimrc

2

, जब तक मुझे एहसास हुआ कि autoindent और smartindent दोनों अनावश्यक अगर "पर filetype मांगपत्र" अपने vimrc में सेट कर दिया जाता हैं - 'filetype indent on' इंडेंटेशन नियमों को समझने के लिए इंडेंट/sh.vim (या जो भी भाषा) फ़ाइल का उपयोग आपकी vim निर्देशिका में करता है, और ऑटोइंडेंट और स्मार्टइंडेंट दोनों इसमें हस्तक्षेप कर सकते हैं।

मैंने इसे sh के साथ परीक्षण नहीं किया है, लेकिन जब मैंने स्विच किया तो पर्ले अचानक ठीक से व्यवहार करना शुरू कर दिया।

सिडेनोट: जुआन का रीडायरेक्ट, "हैश टाइप करने के बाद इंडेंट को पुनर्स्थापित करना" एक अच्छा समाधान नहीं है - जबकि यह एक स्थिति में समस्या को सही करता है (कोड टाइप करना), यह नहीं बदलता है कि संपादक इसे कैसे सोचता है इंडेंट हो, इसलिए एक पुन: इंडेंट (विज़ुअल =, या सामान्य ==) इसे बाईं ओर वापस ले जाएगा।

1

पिछले जवाब का सुझाव दे:

: inoremap # एक्स^एच #

उत्कृष्ट है। वीआईएम दस्तावेज द्वारा सुझाव दिया गया जवाब ": smartindent मदद करें" पर दिया गया है। ध्यान दें कि^एचटीआरएल-वी CTRL-H का उपयोग करके एच दर्ज किया गया है। दस्तावेज से संबंधित खंड नीचे है।

When typing '#' as the first character in a new line, the indent for 
    that line is removed, the '#' is put in the first column. The indent 
    is restored for the next line. If you don't want this, use this 
    mapping: ":inoremap # X^H#", where ^H is entered with CTRL-V CTRL-H. 
    When using the ">>" command, lines starting with '#' are not shifted 
    right.