2010-03-02 9 views
69

मैं विम का उपयोग कर रहा हूं और पायथन स्क्रिप्ट संपादित कर रहा हूं।विम स्वचालित रूप से पायथन टिप्पणियों पर इंडेंटेशन को हटा देता है

Autoindent सामान्य रूप में बहुत अच्छी तरह से काम करता है, लेकिन जब मैं एक टिप्पणी लिखने के लिए एक नई लाइन और प्रकार '#' शुरू करते हैं, विम मेरे लिए है कि रेखा unindents।

उदाहरण के लिए, यदि

def foo(): 

है और मैं एंटर दबाएं, विम ठीक से

def foo(): 
    pass 

इंडेंट होगा, लेकिन, अगर बजाय pass लिख-लिख कर, मैं # टाइप करें, यह स्वचालित रूप से unindents

def foo(): 
# comment 

class Thing(): 
    def __init__(self): 
     pass 
# comment line gets unindented all the way 

मेरी .vimrc फ़ाइल निम्नानुसार है। क्या कोई जानता है कि यह क्यों हो रहा है?

set tabstop=4 
set smartindent 
set shiftwidth=4 
set expandtab 
set backspace=indent,eol,start 
set scrolloff=3 
set statusline=%f%m%r%h%w\ [%Y\ %{&ff}]\ [%l/%L\ (%p%%)] 
set laststatus=2 
+0

teh खोज इंजन के लिए: समर्पण, पुराना। – naught101

उत्तर

53

पर बनाता है विम व्यवहार करते हैं जैसे तुम मेरे लिए का वर्णन है, nosmartindent साथ जबकि (जो है जो मैं का उपयोग करते हैं) smartindent स्थापना यह बर्ताव करता है जैसे आप इसे पसंद करेंगे।

अद्यतन: smartindent पर डॉक्स से:

जब एक नई लाइन में पहले वर्ण, कि लाइन के लिए मांगपत्र के रूप में '#' टाइपिंग निकाल दिया जाता है, '#' पहले में डाल दिया जाता है स्तंभ। इंडेंट अगली पंक्ति के लिए बहाल किया गया है। यदि आप यह नहीं चाहते हैं, तो इस मैपिंग का उपयोग करें: ": इनोरमैप # एक्स^एच #", जहां^एचटीआरटी-वी CTRL-H के साथ दर्ज किया गया है। ">>" कमांड का उपयोग करते समय, '#' से शुरू होने वाली रेखाएं को स्थानांतरित नहीं की जाती हैं।

लगता है कि यह किया जाना है।


अद्यतन: निम्नलिखित के साथ परेशान करने के लिए शायद कोई जरूरत नहीं ... मैं इसे यहाँ जोड़ा सूचना के मूल्य के लिए छोड़ देंगे। ;-)

हैं स्थापित करने nosmartindent मदद नहीं करता है, शायद आप :set आदेश इस्तेमाल कर सकते हैं - कोई पैरामीटर के साथ - प्रभाव में अपने विम सत्र में सभी सेटिंग्स की सूची प्राप्त करने, तो यह कहीं न कहीं पेस्ट (Pastie पर शायद)। जहां तक ​​मुझे याद है, कुछ अन्य विकल्प हैं जो स्वचालित इंडेंटेशन को प्रभावित करते हैं।

+8

मुझे CTRL-V CTRL-H का उपयोग करके इस उत्तर में^एच को प्राप्त करने में कठिनाई हुई, लेकिन मुझे पता चला कि 'inoremap # X #' चाल है। – Glenn

17

जबकि माइकल की पोस्ट बताती है कि कौन सा स्मार्टइंडेंट करता है, तो आप इसे बंद करने से काफी बेहतर कर सकते हैं। आप इसे अपनी पसंद के हिसाब से अधिक कॉन्फ़िगर कर सकते हैं, या बेहतर अभी तक, विम को आपके लिए बेहतर इंडेंटेशन चुनने दें। अपने बजाय vimrc अन्य मांगपत्र सेटिंग्स में निम्नलिखित के साथ:

filetype indent on 

विम स्वचालित रूप से अजगर के लिए उचित मांगपत्र प्लगइन का उपयोग करेगा। यह सिर्फ # लाइन को डि-इंडेंट करने से बेहतर तरीका है - बहुत कुछ सब ठीक से इंडेंट किया जाना चाहिए।

+3

जेफ्रोमी, मुझे आपका उत्तर समझ में नहीं आया। vim पहले से ही पाइथन इंडेंटेशन प्लगइन का चयन कर रहा है - समस्या यह है कि प्लगइन अजीब रूप से इंडेंट करने के लिए होता है, इंडेंटेशन को पूरी तरह से हटा देता है। तो आपका प्रस्तावित समाधान प्रश्न में बताए गए समस्या को ठीक नहीं करता है। –

+2

'smartindent' लाइन-प्रारंभिक' # 'को अनइंडेंट करने का कारण बनता है चाहे इस पर 'फ़ाइल प्रकार इंडेंट' चालू है या नहीं। इसलिए, आपको वैसे भी चीजों को ठीक करने के लिए 'nosmartindent' सेट करना होगा। –

+4

आह, ठीक है। मुझे स्पष्टीकरण देना चाहिए: मैं वास्तव में * अन्य इंडेंट सेटिंग्स के बजाय फ़ाइल प्रकार इंडेंट * का उपयोग करना चाहता था। – Cascabel

5

आप केवल अजगर फ़ाइलों के लिए एक विकल्प की कोशिश कर सकते हैं:

autocmd BufRead *.py inoremap # X<c-h>#<space> 
-1

आप इस स्क्रिप्ट स्थापित हैं, तो आप उचित अजगर (pep8) इंडेंट मिल जाएगा:

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

+0

पर एक नया प्रश्न पूछूंगा, यह बहुत खराब प्रतीत होता है। – tr33hous

+0

कोई बात नहीं। यहां तक ​​कि सुझाव दिया गया जवाब असफल लगता है। कुछ प्लगइन होना चाहिए मेरे पास – tr33hous

1

कुछ के लिए अनजान कारण उपर्युक्त व्यवहार तब हुआ जब मेरे पास cindent था। इसे बंद करना मेरे लिए इसे ठीक कर दिया। उपर्युक्त अन्य सुधारों में से कोई भी मदद नहीं करता है।

+1

कारण यह है कि सी कोड (जो कि 'सिंडेंट' है) में सम्मेलन एक प्रोप्रोसेसर निर्देश को अनदेखा करना है, जो '#' से शुरू होता है। तो, यह सी के लिए उपयोगी है लेकिन पाइथन के लिए एक बड़ी समस्या है। –

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